C++ analysis of KeyWord (eg:: virtual,abstract,static,override,const)

来源:互联网 发布:vivo默认软件设置 编辑:程序博客网 时间:2024/05/16 01:33

virtual :: 方法和属性如果作为虚拟成员,虚拟成员的实现可由派生类中的重写成员更改。默认情况下方法是非虚拟的,不能重写非虚函数。不能将virtual 修饰符和一下修饰符一起使用:static   abstract   override   如果认为某个方法通用性比较弱,就用virtual 声明该方法,然后用户可以根据不同的情况继承并进行重载。

abstract :: 声明为 abstract 成员可以不包括实现代码,但只要类中还有未实现的抽象成员(抽象方法),那么这个类就是一个抽象类,抽象类的对象就不能被实例化,通常用于强制继承类必须实现某一成员.抽象类是必须要派生子类的。并且,如果子类没有实现抽象基类的所有方法,则子类也成为一个抽象类。

static :: 对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷 贝,由该类型的所有对象共享访问。也就是说,静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共 用。 以,静态数据成员的值对每个对象都是一样的,它的值可以更新;静态数据成员存储在全局数据区。静态数据成员定义时要分配空间,所以不能在类声明中定义。 Example 5中,语句int Myclass::Sum=0;是定义静态数据成员;因为静态数据成员在全局数据区分配内存,属于本类的所有对象共享,所以,它不属于特定的类 象,在没有产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它

静态数据成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式为:

  <;数据类型><;类名>::<;静态数据成员名>=<;值>

#include<iostream.h>class Myclass{public:Myclass(int a,int b,int c);void GetSum();private:int a,b,c;static int Sum;//声明静态数据成员};int Myclass::Sum=0;//定义并初始化静态数据成员Myclass::Myclass(int a,int b,int c){this->a=a;this->b=b;this->c=c;Sum+=a+b+c;}void Myclass::GetSum(){cout<<"Sum="<<Sum<<endl;}void main(){Myclass M(1,2,3);M.GetSum();Myclass N(4,5,6);N.GetSum();M.GetSum();}

override :: 当子类声明了与基类相同名字的方法,而且使用了相同的签名时,就称派生类的成员覆盖(hide)了基类的成员




原创粉丝点击