【发布时间】:2016-10-15 03:33:00
【问题描述】:
我有下一个代码:
#include <iostream>
using namespace std;
class A{
public:
A() { cout << "A() ";}
virtual void f()=0;
virtual void g() { cout << "ag() ";}
static void h() { cout << "ah() ";}
void i() { cout << "ai() ";}
~A() { cout << "~A() "; }
};
class B: public A{
void f() { cout << "bf() ";}
public:
void g() { cout << "bg() ";}
};
class C: public B{
public:
static void h() { cout << "ch() "; }
void g() { cout << "cg() ";}
~C() { cout << "~C() ";}
};
void f1(){
B b;
C c;
b.h();
c.h();
A* arr[2] = { new B ,new C};
arr[0]->h();
arr[1]->h();
delete arr[0];
delete arr[1];
}
int main(){
f1();
return 0;
}
我不明白为什么它会打印 A() A() ah() ch() A() A() ah() ah() ~A() ~A() ~C() ~A( ) ~A() 并且它不打印 A() A() ah() ch() A() A() ah() ch() ~A() ~A() ~C() ~A( ) ~C()。谁能帮帮我?
【问题讨论】:
-
看起来大约 90% 的代码(以及 90% 的输出)与问题无关。
-
TL;DR:析构函数应该是虚拟的,静态函数不能是虚拟的。
-
尊重在这里帮助您的人的时间,并花一点时间删除您做不感到困惑的部分,然后再询问其余部分。
-
我很抱歉提出不好的问题。我是stackoverflow的新手。我会尽量不重蹈覆辙。
-
“我不明白为什么”是你不问问题的方式(在 SO 或其他地方)。您应该解释为什么您认为您的代码具有明确定义的行为以及这种行为应该是什么。
标签: c++ inheritance polymorphism destructor