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

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)了基类的成员




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值