使用一些 "specialized" 字段调用继承的方法
Call inherited method using some "specialized" fields
例如:
struct A {
~A() {
cout << me << ": destructor" << endl;
}
const string me = "A";
};
struct B : A {
const string me = "B";
};
int main() {
{
A a;
B b;
}
cout << "----\n";
return 0;
}
抱歉新手问题,我只是想知道以下输出:
A: destructor
A: destructor
----
第二行我期待B: destructor
。你能解释为什么吗?如何在不重写析构函数的情况下修改代码才能看到预期的结果?
声明 B::me 隐藏 A::me,但 A::~A 显然使用 A::me。 (您应该阅读更多关于 ctors 和 dtors 的内容,特别是为什么不应在 ctors 和 dtors 中调用虚函数以获得更深入的理解)。至于例子应该如何更正:
struct A{
string me;
A(string str = "A") : me(str){}
~A(){cout<<me<<endl;}
}
struct B : A {
B(string str = "B") : A(str){}
}
例如:
struct A {
~A() {
cout << me << ": destructor" << endl;
}
const string me = "A";
};
struct B : A {
const string me = "B";
};
int main() {
{
A a;
B b;
}
cout << "----\n";
return 0;
}
抱歉新手问题,我只是想知道以下输出:
A: destructor
A: destructor
----
第二行我期待B: destructor
。你能解释为什么吗?如何在不重写析构函数的情况下修改代码才能看到预期的结果?
声明 B::me 隐藏 A::me,但 A::~A 显然使用 A::me。 (您应该阅读更多关于 ctors 和 dtors 的内容,特别是为什么不应在 ctors 和 dtors 中调用虚函数以获得更深入的理解)。至于例子应该如何更正:
struct A{
string me;
A(string str = "A") : me(str){}
~A(){cout<<me<<endl;}
}
struct B : A {
B(string str = "B") : A(str){}
}