访问私有std :: string继承上的字符串

时间:2015-05-26 07:10:18

标签: c++

我在书中看到了这个例子:

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

我不知道它是如何印刷的&#34;如何&#34;当我说出类名?是因为运营商?但我知道,当你进行私有继承时,公共和受保护的变量和方法将被视为&#34;私有&#34;外部。

所以我的问题是,它是如何完全印刷的&#34;如何&#34; ?

编辑:

所以谁持有字符串值&#34;如何&#34;它是如何打印的?因为它是通过类型转换打印的。

2 个答案:

答案 0 :(得分:6)

这说明了C风格演员的危险之一:它是唯一忽略继承访问说明符的演员。正如你所看到的,演员成功地挖出了std::string基础参考,即使它是私有的。如果您使用static_cast尝试此操作,则无法编译。

编辑:

std::string t的{​​{1}}子对象在"How"的构造函数中初始化时Test持有$cat_id。转换为对基类的引用用于访问相应的子对象。

答案 1 :(得分:3)

强制转换(std::string&)tt转换为对其基类std::string的实例的引用。 C样式转换是唯一可以转换为无法访问的基类的转换。效果与普通隐式转换为可访问的基类相同。