zoukankan      html  css  js  c++  java
  • c++中构造函数和析构函数能够调用虚函数

    1. 从语法上讲,构造函数和析构函数都能调用虚函数,没有问题;

    2. 从实际效果上,无法实现虚函数的作用,

    例如,基类的构造函数中即使调用虚函数,也是调用的基类自己实现的虚函数;

               基类的析构函数中即使调用虚函数,也是调用的基类自己实现的虚函数;

    《Effective c++》条款09:不要在构造函数和析构函数中调用virtual函数,因为这类调用不会下降至派生类;

    解释如下:

    派生类对象的基类构造期间,对象的类型是基类的类型,而不是派生类类型;

    class CBase
    {
    public:
        CBase()
        {
            cout << "this is CBase create" << endl;
            func();
            cout << "********************" << endl;
        }
    
        ~CBase()
        {
            cout << "this is ~CBase destory" << endl;
            func();
            cout << "---------------------" << endl;
        }
    
        virtual void func()
        {
            printf("this is CBase func
    ");
        }
    
    };

    class CSub : public CBase
    {
    public:
    CSub()
    {
    printf("this is CSub create ");
    func();
    cout << "+++++++++++++++++++" << endl;
    }

    ~CSub()
    {
    printf("this is ~CSub destory ");
    func();
    cout << "===================" << endl;
    }

    virtual void func()
    {
    printf("this is CSub func ");
    }
    };

    {
    CSub c;
    }

    this is CBase create
    this is CBase func
    ********************
    this is CSub create
    this is CSub func
    +++++++++++++++++++
    this is ~CSub destory
    this is CSub func
    ===================
    this is ~CBase destory
    this is CBase func
    ---------------------
    青青园中葵,朝露待日晞。 阳春布德泽,万物生光辉。 常恐秋节至,焜黄华叶衰。 百川东到海,何时复西归? 少壮不努力,老大徒伤悲!
  • 相关阅读:
    java 将表情转换成字符串存入数据库
    java html websocket简单实现
    Java poi读取Excel表格中公式的计算值
    转盘代码,自己搞了一个
    html5 canvas画布
    cat命令查看文件指定行数
    CentOS7 安装 gpbackup 和 gpbackup-s3-plugin 来备份和还原 Greenplum 数据库
    QT5 打包发布Release应用程序
    CentOS7 安装Redis6.0.10
    ES系列(二):基于多播的集群发现实现原理解析
  • 原文地址:https://www.cnblogs.com/weiyouqing/p/14626134.html
Copyright © 2011-2022 走看看