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 */
}
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);
}