有一个常见的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
今夜偏知春气暖,虫声新透绿窗纱。