【C/C++】虛析構函數

直接從代碼看結果

// demo 1
class Base {
public:
    Base() {
        cout << "Base Constructor" << endl;
    }

    ~Base() {
        cout << "Base Destructor" << endl;
    }
};

class Derived : public Base {
public:
    Derived() {
        cout << "Derived Constructor" << endl;
    }

    ~Derived() {
        cout << "Derived Destructor" << endl;
    }
};

int main() {
    Base *obj = new Derived();
    delete obj;
}

輸出:
Base Constructor
Derived Constructor
Base Destructor

// demo 2, 更改Base析構函數的定義,其他不變
class Base {
public:
    Base() {
        cout << "Base Constructor" << endl;
    }

    virtual ~Base() {
        cout << "Base Destructor" << endl;
    }
};

輸出:
Base Constructor
Derived Constructor
Derived Destructor
Base Destructor

// demo 3, 更改Base析構函數的定義,定義爲純虛函數
class Base {
public:
    Base() {
        cout << "Base Constructor" << endl;
    }

    virtual ~Base() = 0;
};

編譯出錯:
undefined reference to `Base::~Base()’

// demo 4, 定義Base的析構函數爲純虛函數,並且實現
class Base {
public:
    Base() {
        cout << "Base Constructor" << endl;
    }

    virtual ~Base() = 0;
};

Base::~Base() {

}

輸出:
Base Constructor
Derived Constructor
Derived Destructor

繼承關係下的析構函數定義爲虛函數

構造函數不能爲虛函數

純虛函數可以有其實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章