C++ - 从std :: string类派生类来添加额外的函数?

Jay*_*Jay 2 c++

首先,我知道该std::string课程具有我可能需要的所有功能.这仅用于测试目的,以了解我将来能够做些什么.

无论如何,说我有这个:

class MyString : public std::string { }
Run Code Online (Sandbox Code Playgroud)

那么我怎么会使用:

MyString varName = "whatever";
Run Code Online (Sandbox Code Playgroud)

因为肯定我会得到一个错误,因为"什么"是一个std :: string而不是MyString类的成员?

如果你理解我的意思,我该如何解决这个问题?

(顺便说一句,我知道这可能是一个非常愚蠢的问题,但我很好奇)

Mik*_*our 7

从类中派生只是为了添加成员函数并不是一个好主意; 特别是像非多态的类std::string.相反,编写非成员函数以使用现有字符串类执行任何操作.

如果你真的想这样做,你可以继承构造函数:

class MyString : public std::string {
public:
    using std::string::string;
};
Run Code Online (Sandbox Code Playgroud)

现在,您可以以可以初始化的任何方式初始化类std::string,包括从示例中的字符数组转换.(顺便说一句,"whatever"不是a std::string,它是一个零终止的字符数组,const char[9].)

  • @CássioRenan:如有必要,我会留下评论.没有初学者应该使用过时的方言. (4认同)
  • 另外,关于从标准库类派生,[这里有一些需要考虑的事项](/sf/ask/75177091/). (2认同)
  • @rozina:这真的不是语言教程的地方。请参阅 http://en.cppreference.com/w/cpp/language/using_declaration#Inheriting_constructors 或您最喜欢的 C++ 书籍。回答您的问题:是和是。 (2认同)