纯虚函数
仅想对基类进行向上类型转换,使用它的接口,而不希望用户实际的创建一个基类的对象
抽象类
在基类中加入至少一个纯虚函数(pure virtual function),使得基类称为抽象类(abstract class).
- 纯虚函数使用关键字virtual,并在其后面加上=0。如果试图去实例化一个抽象类,编译器则会阻止这种操作。
- 当继承一个抽象类的时候,必须实现所有的纯虚函数,否则由抽象类派生的类也是一个抽象类。
- Virtual void fun() = 0;告诉编译器在vtable中为函数保留一个位置,但在这个特定位置不放地址。
纯虚函数语法 virtual void func() = 0;
抽象类型
抽象类 不可以实例化对象
如果类 继承了抽象类, 必须重写抽象类中的纯虚函数
实例:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class Calculator //抽象类不能被实例化 只能被继承 { public: //virtual int getRes(){return 0;}; //虚函数 virtual int getRes() = 0; //纯虚函数 父类有了纯虚函数 整个类就是抽象类 子类继承的时候,就必须要实现 //如果父类中有纯虚函数,这个父类就无法实例化对象了 void setv1(int v) { this->val1 = v; } void setv2(int v) { this->val2 = v; } int val1; int val2; }; class PlusCalculator : public Calculator { public: virtual int getRes() //如果父类中有纯虚函数 子类继承的时候必须要实现 { return val1 + val2; } }; void test01() { //Calculator * cl = new Calculator; //抽象类不能被实例化 Calculator* cl = new PlusCalculator; cl->setv1(10); cl->setv2(20); cout << cl->getRes() << endl; } int main() { test01(); system("Pause"); return 0; }
结果: