C++ 使用“some”调用继承的方法;“专业化”;领域

C++ 使用“some”调用继承的方法;“专业化”;领域,c++,inheritance,code-reuse,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"

例如:

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;
}

在第二行中,我期望
B:destructor
。你能解释一下原因吗?我如何在不重写析构函数的情况下修改代码以查看预期结果?

声明B::me隐藏了A::me,但A::~A显然使用了A::me。(您应该阅读更多关于CTOR和DTOR的内容,特别是为什么不应在CTOR和DTOR中调用虚拟函数,以获得更深入的理解)。关于如何纠正示例:

struct A{
  string me;
  A(string str = "A") : me(str){}
  ~A(){cout<<me<<endl;}
}

struct B : A {
  B(string str = "B") : A(str){}
}
结构A{ 把我捆起来; A(string str=“A”):me(str){}
~A(){cout声明B::me隐藏了A::me,但A::~A显然使用了A::me。(您应该阅读更多关于CTOR和DTOR的内容,特别是为什么不应该在CTOR和DTOR中调用虚拟函数以获得更深入的理解)。至于应该如何更正示例:

struct A{
  string me;
  A(string str = "A") : me(str){}
  ~A(){cout<<me<<endl;}
}

struct B : A {
  B(string str = "B") : A(str){}
}
结构A{ 把我捆起来; A(string str=“A”):me(str){}
~A(){cout
A::me
B::me
完全无关。它们是独立的变量,
A
B::me
一无所知
A::me
B::me
完全无关。它们是独立的变量,
A
B::me
一无所知。