纯虚函数和抽象类

纯虚函数

仅想对基类进行向上类型转换,使用它的接口,而不希望用户实际的创建一个基类的对象

抽象类

在基类中加入至少一个纯虚函数(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;
}

结果:

纯虚函数和抽象类

 

上一篇:CEF预览


下一篇:CMU15-213学习笔记(五)virtual memory虚拟内存