纯虚函数:纯虚函数就在基类中只是定义并不实现,需要在派生类中继承并且实现。纯虚函数的意义就是将派生类的共同特性提取出来。
虚函数和纯虚函数的区别:虚函数在基类中有实现,并且派生类无需一定要继承,派生类可以继承并且重写,实现多态。
抽象类:一个类中含有一个或者多个纯虚函数,那么这个类就是抽象类。不能实例化对象,只能定义指针,指向派生类以实现多态。
代码示例:
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
// test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#pragma warning(disable:4996)
#include <string>
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;
}
执行结果: