• 纯虚函数和抽象类


    纯虚函数

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

    抽象类

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

    结果:

  • 相关阅读:
    Editor REST Client
    log配置
    spring-boot-configuration-processor
    http请求
    做项目用到的一些正则表达式,贴出来共享
    批量插入的实现
    sql执行顺序对比
    Java常用的并发工具类:CountDownLatch、CyclicBarrier、Semaphore、Exchanger
    spring中bean的生命周期
    多属性的对象列表的两种排序方法
  • 原文地址:https://www.cnblogs.com/yifengs/p/15179312.html
Copyright © 2020-2023  润新知