【发布时间】:2017-07-09 02:59:35
【问题描述】:
我正在研究重载的运算符。
由于某种原因,我没有从我的重载函数中获得 cout 输出。
class MyString {
public:
MyString(const char aString[20]){
// copy the input string to "data"
for(int i = 0; i < 20; i++){
data[i] = aString[i];
}
}
public:
MyString operator=(const MyString copyFrom){
MyString copyTo("");
cout << "hi";
for(int i = 0; i < 20; i++){
copyTo.data[i] = copyFrom.data[i];
}
return copyTo;
}
public:
char data[20]; // a pointer to memory
};
int main() {
MyString a("hello");
MyString b = a;
cout << b.data << endl;
return 0;
}
当我运行我的代码时,我得到以下结果:
C:\MinGW\bin>g++ stringoverloading3.cpp
C:\MinGW\bin>a.exe 你好
C:\MinGW\bin>
重载是否会杀死 cout?
【问题讨论】:
-
当然,除非我的超载实际上没有被调用......嗯
-
这个
MyString b = a;不是一个赋值(它是一个初始化),所以不会调用赋值运算符。你的 C++ 教科书应该解释这一点。 -
btw 数组和指针与代码中的注释建议的不一样
-
并且赋值运算符应该将参数作为
const的引用。 -
您的赋值运算符(实际上并未调用)不会更改已分配的实例。并且您的构造函数会读取其输入缓冲区的末尾,这是未定义的行为。
标签: c++ operator-overloading cout