在C ++中返回一个自定义字符串类的<<运算符函数的值
我想创建我自己的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。
首先,你似乎对MyCustomString的定义有问题。 它从std::string
私有地继承,并且包含一个std::string
本身的实例。 我会删除一个或另一个。
假设你正在实现一个新的字符串类,并且你希望能够使用std::cout
输出它,你需要一个cast操作符来返回std::cout
期望的字符串数据:
operator const char *()
{
return this->data.c_str();
}
如果你看看所有流操作符是如何声明的,它们的形式如下:
ostream& operator<<(ostream& out, const someType& val );
基本上你希望你的重载函数能够实际执行输出操作,然后返回新的更新流操作符。 我会建议做的是以下内容,请注意,这是一个全局函数,而不是您班级的成员:
ostream& operator<< (ostream& out, const MyCustomString& str )
{
return out << str.data;
}
请注意,如果您的'数据'对象是私有的,那么基本的OOP可能应该这样做,您可以在内部声明上述运算符为“朋友”函数。 这将允许它访问私有数据变量。
你需要一个独立的功能(你的班级的朋友,如果你的data
私人的,你可能应该这么做!)
inline std::ostream & operator<<(std::ostream &o, const MyCustomString&& d)
{
return o << d.data;
}
链接地址: http://www.djcxy.com/p/67323.html
上一篇: Return value for a << operator function of a custom string class in C++
下一篇: C++ monad library