zoukankan      html  css  js  c++  java
  • 虚析构函数

    虚析构函数
    在什么时候需要将基类析构函数设置成虚函数呢
    
    虚析构函数是为了解决这样的一个问题:基类的指针指向派生类对象,并用基类的指针删除派生类对象。
    如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用(这个我有这种说法吗?。。)。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。
    所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很多人这样总结:当且仅当类里包含至少一个虚函数的时候才去声明虚析构函数。
    抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。
    
    #include<iostream>
    using namespace std;
    
    class CBird
    {
    public:
        CBird() { cout << "CBird constructor." << endl; };
        //当基类
        virtual ~CBird() { cout << "CBird destructor." << endl; };
        virtual void fly() { cout << "CBird fly." << endl; };
    };
    
    class CLark : public CBird
    {
    public:
        CLark() { cout << "CLark constructor." << endl; };
        ~CLark() { cout << "CLark destructor." << endl; };
        void fly() { cout << "CLark fly." << endl; }
    };
    
    int main()
    {
        CBird * pBird = new CLark();
        pBird->fly();
        delete pBird;
        getchar();
        return 0;
    }
  • 相关阅读:
    黑马程序员_java基础笔记(13)...类加载器和代理
    nyoj-411-Friends number
    nyoj-38-布线问题
    nyoj-233-Sort it
    nyoj-115-城市平乱
    nyoj-608-畅通工程
    nyoj-36-最长公共子序列
    nyoj-150-Train Problem I
    nyoj-494-Dancing With the Googlers
    nyoj-214-单调递增子序列(二)
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/4387060.html
Copyright © 2011-2022 走看看