2013-04-03 28 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類派生,因爲大多數沒有虛擬析構函數。