2013-04-03 27 views
-1

我正在阅读C++中的思考。我对该书中显示的以下代码片段感到困惑。继承自C++中的字符串

class MyString: public string, public Object { 
public: 
    ~MyString() { 
    cout << "deleting string: " << *this << endl; 
    } 
    MyString(string s) : string(s) {} 
}; 

我很困惑*thisthis是一个指向MyString对象本身的指针。 为什么*this作为初始化字符串解除引用? 为了使我的问题更清楚,我举一个例子:

Mystring* x = new string("Hello"); 
delete x; 

我不列出完整的代码。如果运行完整代码,则输出为:

删除字符串:hello。

这意味着*这=“你好”。

+4

不是一个好主意,而且该代码不应该编译。 – chris

+3

不要从'std :: string'公开继承。 –

+0

你的问题是什么? –

回答

0

因为operator <<std::ostreamstd::string的过载会提取并打印字符串的c_str()表示或字符串本身。

0

这是指向当前对象的指针。 *这是取消引用指向当前对象的指针,因为它从字符串中派生出一个字符串。然后调用超载的骨架运算符。

当你从对象派生和创建一个与派生对象的关系。

也不要从std类派生,因为大多数没有虚拟析构函数。