C++ Can';不能从重载函数中删除

C++ Can';不能从重载函数中删除,c++,operator-overloading,cout,C++,Operator Overloading,Cout,我在到处找过载的操作符 由于某些原因,我无法从重载函数中获得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];

我在到处找过载的操作符

由于某些原因,我无法从重载函数中获得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;
}
类MyString{
公众:
MyString(const char aString[20]){
//将输入字符串复制到“数据”
对于(int i=0;i<20;i++){
数据[i]=收敛[i];
}
}
公众:
MyString运算符=(const MyString copyFrom){
MyString copyTo(“”);
库特

超载会杀死库特吗?

线路

MyString b = a;
不是赋值。它是初始化。将调用复制构造函数来初始化对象。若要调用赋值运算符,请使用:

MyString b;
b = a;
为了能够使用它,必须首先实现默认构造函数。

MyString b = a;
不是赋值。它是初始化。将调用复制构造函数来初始化对象。若要调用赋值运算符,请使用:

MyString b;
b = a;

为了能够使用它,必须首先实现默认构造函数。

当然,除非我的重载实际上没有被调用……hmm这个
MyString b=a;
不是赋值(它是初始化)您的C++文本本应该解释这个。BTW数组和指针与代码建议中的注释不一样,赋值操作符应该将参数作为<代码> const 参考。您的赋值运算符(实际上不调用)不会更改已分配的实例。并且您的构造函数读取的内容超过了其输入缓冲区的结尾,这是未定义的行为。当然,除非我的重载实际上没有被调用……hmm此
MyString b=a;
不是一个分配(它是一个初始化)您的C++文本本应该解释这个。BTW数组和指针与代码建议中的注释不一样,赋值操作符应该将参数作为<代码> const 参考。您的赋值运算符(实际上不调用)不更改分配的实例。并且构造函数读取的内容超过其输入缓冲区的结尾,这是未定义的行为。