2015-05-04 80 views
2

首先,我知道std::string類具有我可能需要的所有功能。這只是爲了測試目的,看看我將來能做些什麼。C++ - 派生類的std :: string類添加額外的功能?

反正 說我有這樣的:

class MyString : public std::string { } 

我怎麼會那麼,例如,使用:

MyString varName = "whatever"; 

,因爲我肯定會得到一個錯誤,因爲 「一切」 是std :: string不是MyString類的成員?

如果你明白我的意思,我該如何解決這個問題?

(順便說一句,我知道這可能是一個非常愚蠢的問題,但我很好奇)

回答

7

從類派生只需添加成員函數是不是一個好主意;尤其是像std::string這樣的非多態類。相反,編寫非成員函數來對現有的字符串類做任何你想做的事情。

如果你真的想然而做到這一點,你可以繼承構造函數:

class MyString : public std::string { 
public: 
    using std::string::string; 
}; 

現在你可以初始化以任何方式,你可以初始化std::string類,包括從字符數組轉換爲你例。 (順便說一下,"whatever"不是std::string,這是一個零結尾的字符數組,const char[9]。)

+2

另外,關於從普通標準庫類派生,[這裏有一些事情要考慮(https://開頭計算器的.com /問題/ 1073958 /延伸-的-C標準庫逐繼承)。 – CoryKramer

+0

也許你應該添加一個註釋,這隻適用於C++ 11。我知道它已經發布了一段時間,但是一個使用gcc但沒有'-std = C++ 11'的初學者仍然會遇到編譯器錯誤並且感到困惑。 –

+0

這是如何工作的。你現在可以寫'MyString str(「hello」)'我假設。你也可以添加新的構造函數重載到std :: string的重載嗎? – rozina