dro*_*ath 3 c++ operator-overloading
我正在尝试创建自己的std :: string包装器来扩展其功能.但是在声明<<运算符时遇到了问题.到目前为止,这是我的代码:
我的自定义字符串类:
class MyCustomString : private std::string
{
public:
std::string data;
MyCustomString() { data.assign(""); }
MyCustomString(char *value) { data.assign(value); }
void Assign(char *value) { data.assign(value); }
// ...other useful functions
std::string & operator << (const MyCustomString &src) { return this->data; }
};
主程序:
int main()
{
MyCustomString mystring("Hello");
std::cout << mystring; // error C2243: 'type cast' : conversion from 'MyCustomString *' to 'const std::basic_string<_Elem,_Traits,_Ax> &' exists, but is inaccessible
return 0;
}
我希望cout将该类视为std :: string,因此我不需要执行以下操作:
std::cout << mystring.data;
任何形式的帮助将不胜感激!
谢谢.
只是fyi:我的IDE是Microsoft Visual C++ 2008 Express Edition.
如果你看看如何声明所有流操作符,它们的形式如下:
ostream& operator<<(ostream& out, const someType& val );
Run Code Online (Sandbox Code Playgroud)
基本上,您希望重载函数实际执行输出操作,然后返回新更新的流操作符.我建议做的是以下内容,请注意这是一个全局函数,而不是您的类的成员:
ostream& operator<< (ostream& out, const MyCustomString& str )
{
return out << str.data;
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的"数据"对象是私有的,可能应该使用哪个基本OOP,则可以在内部将上述运算符声明为"朋友"函数.这将允许它访问私有数据变量.