zoukankan      html  css  js  c++  java
  • 虚函数(实现多态)

    在函数声明时加virtual
        virtual void display();
        实现用基类指针访问派生类函数

        要把基类的析构函数声明为 虚函数
        这是因为当通过 动态方式 建立 对象的时候,当使用多态性,利用基类指针指向 派生类,那么当对指向派生类的基类指针 使用delete,如果析构函数不是虚基类,则仅仅调用基类的 析构函数,而不是调用派生类的析构函数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include<iostream>
    using namespace std;
    class ClxBase{
    public:
                    ClxBase() {};
                    ~ClxBase() {cout << "Output from the destructor of class ClxBase!" << endl;};
     
                     void DoSomething() { cout << "Do something in class ClxBase!" << endl; };
    };
     
    class ClxDerived : public ClxBase{
    public:
                    ClxDerived() {};
                    ~ClxDerived() { cout << "Output from the destructor of class ClxDerived!" << endl; };
     
                     void DoSomething() { cout << "Do something in class ClxDerived!" << endl; };
    };
    int   main(){ 
                    ClxBase *p =  new ClxDerived; //基类指针,指向派生类
                    p->DoSomething();
                     delete p;      //这里因为析构函数不是虚函数,所以仅仅调用基类 的 析构函数
                     return 0;
    }

    这段代码输出如下:

    构造函数不能声明为虚函数
  • 相关阅读:
    任务调度~Quartz.net实现简单的任务调试
    编译器错误~写JS还是谨慎点好
    编译器错误~不能向ObjectStateManager添加相同的键
    EF架构~将数据库注释添加导入到模型实体类中
    c++ pair类型
    Adobe dreamweaver 5.5安装过程
    c++函数作为参数传递
    c++ vector.clear()
    动态规划之装配线调度问题
    转:VS后缀名详解
  • 原文地址:https://www.cnblogs.com/zhxshseu/p/5292941.html
Copyright © 2011-2022 走看看