有一個常見的c++題,就是父類和子類的構造函數和析構函數分別調用順序:
- 父類構造函數
- 子類構造函數
- 子類析構函數
- 父類析構函數
以及父類中的函數在子類中重新實現后,父類指針指向子類后,該指針調用的函數是父類中的還是子類中的(子類的)。
通過一個例子說明:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>class Parent {
public:virtual void func() {std::cout << "Parent." << std::endl;}Parent(){ std::cout << "Parent construct.\n" << std::endl;}~Parent(){ std::cout << "Parent destory.\n" << std::endl;}
};class Son : public Parent {
public:void func() {std::cout << "Son." << std::endl;}Son(){std::cout << "Son construct.\n" << std::endl;}~Son(){std::cout << "Son destory.\n" << std::endl;}
};int main(int argc, char* argv[]) {Parent *parent1 = new Parent(); // Parent construct.Parent *parent2 = new Son(); // Parent construct. Son construct.Son *son = new Son(); // Parent construct. Son construct.parent1->func(); // Parent.parent2->func(); // Son.son->func(); // Son.delete parent1; // Parent destory.delete parent2; // Parent destory.delete son; // Son destory. Parent destory.return 0;
}
2024年5月11日18:39:54
今夜偏知春氣暖,蟲聲新透綠窗紗。