纯虚函数和抽象类

纯虚函数和抽象类

#include <iostream>

using namespace std;

class People
{
public:
	virtual void speak() = 0;  //声明speak为纯虚函数,所在的类为抽象类,只能被继承
};

//子类如果没有实现父类的纯虚函数,则编译不通过
class Chinese :public People
{
public:
	void speak()
	{
		cout << "say hello!" << endl;
	}
};

//有纯虚函数的class为抽象类
int main(int argc, char *argv[])
{
	Chinese c;

	cin.get();
	return 0;
}

final 和override

#include <iostream>

using namespace std;

class People
{
public:
	virtual void speak() final            //final禁止虚函数,被子类重写
	{
		cout << "People speak method" << endl;
	}
	virtual void run()
	{
		cout << "People run " << endl;
	}
};

class Chinese :public People
{
public:
	//void speak()                      //子类不能重写该方法
	//{
	//	cout << "say hello!" << endl;
	//}
	void run() override                //override代表子类重写父类的run虚函数 
	{
		cout << "Chinese run " << endl;
	}
};

int main(int argc, char *argv[])
{
	Chinese c;

	cin.get();
	return 0;
}

虚基类和虚继承

#include <iostream>

using namespace std;

//被子类使用virtual关键字的类被称为虚基类
class People
{
public:
	
};

class Chinese :public virtual  People   //子类继承父类,加virtual关键字称为虚继承,子类存储父类的地址
{
public:
	
};

int main(int argc, char *argv[])
{
	Chinese c;
	cout << "Chinese Size:" << sizeof(Chinese) << endl;

	cin.get();
	return 0;
}

子类虚继承,内部有指向虚基类的地址

秋风 2018-04-20