我在书中看到了这个例子:
class Test: private std::string
{
public:
Test():std::string("How?")
{
}
};
int main(int argc, char** argv)
{
Test t;
std::cout<<(std::string&)t<<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不知道当我对类名称进行类型化时它是如何打印"如何"的?是因为运营商?但我知道,当你进行私有继承时,公共和受保护的变量和方法将被视为"私有".
所以我的问题是,它是如何打印"如何"?
编辑:
那么谁持有字符串值"如何"以及它是如何打印的?因为它是通过类型转换打印的.
这说明了C风格转换的危险之一:它是唯一忽略继承访问说明符的转换.如你所见,演员成功地挖出了std::string基准参考,即使它是私有的.如果你用a尝试这个static_cast,它将无法编译.
编辑:
该std::string的子对象t持有"How",因为你初始化它Test的构造.转换为对基类的引用用于访问相应的子对象.