c++抽象类中纯虚函数的理解

纯虚函数:纯虚函数就在基类中只是定义并不实现,需要在派生类中继承并且实现。纯虚函数的意义就是将派生类的共同特性提取出来。

虚函数和纯虚函数的区别:虚函数在基类中有实现,并且派生类无需一定要继承,派生类可以继承并且重写,实现多态。

抽象类:一个类中含有一个或者多个纯虚函数,那么这个类就是抽象类。不能实例化对象,只能定义指针,指向派生类以实现多态。

代码示例:

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//

// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include 
#pragma warning(disable:4996)
#include 

using namespace std;

/*一个类中含有一个或者多个纯虚函数,那么这个类就是抽象类。
纯虚函数的意义就是将派生类的共同特性提取出来
*/
class coder{
public:
	virtual void sleep() = 0;
							//不能实例化对象,只能定义指针,指向派生类以实现多态。
							//纯虚函数就像这个类中描述的一样,只是定义并不实现,需要在派生类中继承并且实现。
							/*虚函数和纯虚函数的区别是:虚函数在基类中有实现,
							并且派生类无需一定要继承,派生类可以继承并且重写,实现多态*/
	virtual void eat() = 0;
	virtual void code() = 0;
};

class c_coder :public coder{
public:
	void sleep(void){
		cout << "c_coder sleep" << endl;
	}
	void eat(void){
		cout << "c_coder eat" << endl;
	}
	void code(void){
		cout << "c_coder code" << endl;
	}
};

class cpp_coder :public coder{
public:
	void sleep(void){
		cout << "cpp_coder sleep" << endl;
	}
	void eat(void){
		cout << "cpp_coder eat" << endl;
	}
	void code(void){
		cout << "cpp_coder code" << endl;
	}
};
int main(int argc, char *argv[])
{
	//coder coder0;  //此处报错,不允许使用抽象类
	coder *pcoder0;//这里就是可以的,这个指针可以指向派生类实现多态
	c_coder a;
	cpp_coder b;

	pcoder0 = &a;
	pcoder0->code();
	pcoder0->eat();
	pcoder0->sleep();

	pcoder0 = &b;
	pcoder0->code();
	pcoder0->eat();
	pcoder0->sleep();

	return 0;

}

执行结果:

c++抽象类中纯虚函数的理解_第1张图片

你可能感兴趣的:(interview,c++面试,c++,纯虚函数和虚函数区别,抽象类)