使用一些"专门的"来调用继承的方法。领域

时间:2017-03-29 10:06:10

标签: c++ inheritance code-reuse

例如:

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。你能解释一下原因吗?如何在不重写析构函数的情况下修改代码以查看预期结果?

1 个答案:

答案 0 :(得分:2)

声明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){}
}
相关问题