我创建了一个string类,在其他类中重载插入器<<和提取器>>。但是这里出了一些问题,尽管我使用了一个复制构造函数,在这里我获取了对象成员变量的深度副本。我怀疑我需要在重载插入器>> (cin)的函数中做同样的事情,但是我不知道怎么做。
发生的情况是,当用户在conselewindow中输入他的名字时,cout什么也不返回。下面是控制台中的场景
Enter a name:例如,用户输入Sally并输出控制台。
your name is: 没什么大不了的。
所以我的问题是:
非常感谢您的帮助!
#include <iostream>
using namespace std;
class String {
int str_len;
public:
char *string;
// default constructor
String() {
str_len = 100;
string = new char[str_len]();
cout << "initialiserat default-constructor!\n";
}
// destrcutor
~String() {
delete [] string;
string = 0;
}
// copy constructor
String (const String &string_obj) {
str_len = string_obj.str_len;
if (string_obj.string) {
string = new char[str_len];
strncpy(string, string_obj.string, str_len);
} else {
string = 0;
}
}
// Overloading assignment-operator
String operator=(const String& string_obj) {
if (this == &string_obj) {
return *this;
}
delete [] string;
str_len = string_obj.str_len;
if(string_obj.string) {
string = new char[str_len];
strncpy(string, string_obj.string, str_len);
} else {
string = 0;
}
return *this;
}
};
// overloading inserter <<
ostream &operator<<(ostream &stream, String obj) {
stream << obj.string;
return stream;
}
// overloading extractor >>
istream &operator>>(istream &stream, String obj) {
cout << "Enter a name: ";
stream >> obj.string;
return stream;
}
int main() {
String string3;
cin >> string3;
cout << "your name is: " << string3 << endl;
return 0;
}发布于 2014-05-04 11:06:14
这个运算符
istream &operator>>(istream &stream, String obj) {
cout << "Enter a name: ";
stream >> obj.string;
return stream;
}是无效的。参数String obj是函数的局部变量,在退出该函数后将被销毁。将运算符定义为
istream &operator>>(istream &stream, String &obj) {
cout << "Enter a name: ";
stream >> obj.string;
return stream;
}还将输出运算符定义为
ostream &operator<<(ostream &stream, const String &obj) {
stream << obj.string;
return stream;
}考虑到当数据成员string被定义为公共时,它不是一个好的类设计。任何人都可以改变它。
class String {
int str_len;
public:
char *string;https://stackoverflow.com/questions/23455409
复制相似问题