C++ 字符串类中的cin.get()或重载
我在下面有一个字符串类:C++ 字符串类中的cin.get()或重载,c++,c++11,operator-overloading,overloading,C++,C++11,Operator Overloading,Overloading,我在下面有一个字符串类: class Mystring { private: char *letter; public: friend ostream & operator <<(ostream &out, const Mystring& s); friend istream & operator >>(istream &i
class Mystring
{
private:
char *letter;
public:
friend ostream & operator <<(ostream &out, const Mystring& s);
friend istream & operator >>(istream &in,Mystring& s);
};
类Mystring
{
私人:
字符*字母;
公众:
friend ostream&operator(istream&in、Mystring&s);
};
这是主要功能:
int main()
{
Mystring s[10];
cin.get(s,10);
cout << s;
_getch();
return 0;
}
intmain()
{
Mystring[10];
cin.get(s,10);
coutcin.get
是cin
的成员函数(因此是
)。您不能重载它,因此应该使用
操作符
for (auto& i : s)
cin >> s;
如果您不想这样做,只需在MyString
中编写一个get
方法,该方法接受istream
Mystring& Mystring::get(std::istream& in) { ... }
Mystring ms;
ms.get(std::cin);
您不能重载该类之外的另一个类的成员函数。由于运算符的语法,您可以这样做,但仅此而已。您必须更改自己的类来处理它。如果要将其分配给MyString数组,则应将其分配给MyString对象
如果您有“>>”和“为什么不使用>
操作符?OMG!!!如果我使用我的>>操作符,它将删除空格后面的所有字符:(@BunThaiDeng,这就是get
现在要做的事?当我输入一个像“Hello”这样的字符串时,我会输出“Hello”,但当我输入时”Hello World“it输出”Hello,所以我需要使用cin.get();@bunthaiden问题是如何重载cin.get
,答案是这是不可能的。我不知道你想做什么,但是如果你在实现某个东西时遇到问题,你可以问一个包含所有相关信息的问题。
int main()
{
Mystring s;
// Mystring should construct memory for *letter and put the string in it
// Quite confusing why you want to have only one letter inside MyString,
// Probably you need to change to a better name *letters.
cin >> s; // will stop reading till white space
cout << s;
//Incase you want to read a char array and construct a MyString
char a[10];
cin.get(a,10);
MyString(a); // You need to define a constructor in MyString for this to work.
_getch();
return 0;
}