Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当涉及到简单的派生时,我应该在继承中覆盖什么? 类MyString:公共字符串{ 公众: 使用string::string; 使用字符串::运算符=; 布尔运算符==(MyString&); 布尔运算符(MyString&); MyString&operator=(MyString&); MyString&运算符=(字符串&); MyString运算符()(int,int); friend ostream&operator_C++ - Fatal编程技术网

C++ 当涉及到简单的派生时,我应该在继承中覆盖什么? 类MyString:公共字符串{ 公众: 使用string::string; 使用字符串::运算符=; 布尔运算符==(MyString&); 布尔运算符(MyString&); MyString&operator=(MyString&); MyString&运算符=(字符串&); MyString运算符()(int,int); friend ostream&operator

C++ 当涉及到简单的派生时,我应该在继承中覆盖什么? 类MyString:公共字符串{ 公众: 使用string::string; 使用字符串::运算符=; 布尔运算符==(MyString&); 布尔运算符(MyString&); MyString&operator=(MyString&); MyString&运算符=(字符串&); MyString运算符()(int,int); friend ostream&operator,c++,C++,不是从std::string派生的。有些原因已经解释过了,所以我不再重复 如果要扩展std::string的功能,可以 创建一个包装类 class MyString :public string { public: using string :: string; using string :: operator=; bool operator== (MyString&); bool operator< (MyString&); bo

不是从
std::string
派生的。有些原因已经解释过了,所以我不再重复

如果要扩展
std::string
的功能,可以

创建一个包装类

class MyString :public string {
public:
    using string :: string;
    using string :: operator=;
    bool operator== (MyString&);
    bool operator<  (MyString&);
    bool operator>  (MyString&);
    MyString& operator=  (MyString&);
    MyString& operator=  (string&);
    MyString operator() (int, int);
    friend ostream & operator<<(ostream&, MyString&);
};

MyString MyString::operator() (int a, int b) {
    MyString os;
    os = string::substr(a, b);
    return os;
}

问题是,它与<代码> STD::String < /代码>无关。它不能被赋值给<代码> STD::String < /C> >,也没有传递给函数接受<代码> STD::String 1。也有点冗长。考虑添加<代码> >运算符+ < /代码>的所有重载。(

std::string+MyString
MyString+std::string
,也可能是
MyString+char*
,添加
consts
和移动语义)并且您使用了16种方法

另一种选择是只定义helper方法

class MyString
{
    std::string underlying_string;
public:
    /* methods */
}

  • 非显式ctor
    MyString::MyString(std::string)
    ,用户定义的转换
    运算符std::string()
    ,可以提供帮助,但其含义与继承不同

  • afaik
    std::string
    s析构函数是非虚拟的,也就是说,它并不是真正用来继承它的。不要派生。尤其不是从逻辑密封的类。什么是“轻派生”?@juanchopanza我不敢问,因为我不确定这是我的无知还是编造出来的;)抱歉,伙计们,似乎我应该避免使用诸如单词之类的术语。如果您想将其传递给接受std::string的函数,您可以在类上定义
    operator std::string()
    。这可能非常有用。
    std::string do_super_cool_thing(const std::string& str, int a, int b)
    {
        return magic(str, a, b);
    }