#include <iostream>
using namespace std;
class A {
public:
A() {
f(); // 构造函数中无运行时多态,输出A::f()
}
virtual void f() {
cout << "A::f()" << endl;
}
void g() {
cout << "A::g()" << endl;
}
virtual ~A() { // 将基类析构函数声明为virtual
cout << "des A" << endl;
f(); // 析构函数中有运行时多态
}
};
class B: public A {
public:
B() {
f(); // 构造函数中无运行时多态,输出A::f()
}
virtual void f() {
cout << "B::f()" << endl;
}
void g() {
cout << "B::g()" << endl;
}
~B() {
cout << "des B" << endl;
f(); // 析构函数中有运行时多态
}
};
int main() {
/**
* 输出:
* A::f()
* B::f()
*/
A *p = new B;
/**
* 输出:
* B::f()
*/
p->f();
/**
* 输出:
* A::g()
*/
p->g();
/**
* 输出:
* des B
* B::f()
* des A
* A::f()
*/
delete p;
}
输出结果:
A::f()
B::f()
B::f()
A::g()
des B
B::f()
des A
A::f()
本文通过一个C++代码示例,详细解释了构造函数、成员函数和析构函数中运行时多态的实现机制。展示了如何通过虚函数实现多态,并分析了在不同函数调用场景下多态性的表现。

986

被折叠的 条评论
为什么被折叠?



