【发布时间】:2021-06-22 20:46:56
【问题描述】:
考虑以下 C++ 类继承层次结构及其预期的多态行为。
#include <iostream>
using namespace std;
class A
{
public:
A () { cout << "A constructor\n"; }
virtual void display() { cout << "A display\n"; }
virtual ~A() { cout << "A destructor\n"; }
friend ostream& operator << (ostream &out, A &a) {
a.display();
return out;
}
};
class B : public A
{
public:
B () { cout << "B constructor\n"; }
virtual void display() { cout << "B display\n"; }
virtual ~B() { cout << "B destructor\n"; }
};
class C : public B
{
public:
C () { cout << "C constructor\n"; }
virtual void display() {cout << "C display\n";}
virtual ~C() { cout << "C destructor\n"; }
};
int main()
{
C c1;
cout << endl; c1.display(); cout << endl;
c1.~C();
cout << endl; c1.display(); cout << endl;
c1.~C();
cout << "=================================================" << endl;
C c2;
cout << endl << c2 << endl;
c2.~C();
cout << endl << c2 << endl;
c2.~C();
return 0;
}
我的理解是 display 成员函数是虚拟的,因此将始终如此。在主程序的顶部,它表现良好;也就是说,当我们调用 c1.display() 时,它会打印“C display”消息。即使在破坏 c1 对象之后也是如此。
在下半部分,我们不调用显示函数。相反,我们调用输出流友元函数,该函数将依次调用显示成员函数。在这种情况下,它起初工作得很好;即 cout
但是当我们做同样的事情时 cout
我不明白?销毁对象会停止后期绑定吗?
【问题讨论】:
标签: c++ inheritance polymorphism virtual-functions late-binding