我有一個程序,使用+運算符重載添加兩個複數。該程序是:爲什麼我在明確寫入Copy構造函數後得到垃圾值?
#include<iostream>
class Complex
{
int a, b;
public:
Complex()
{
std::cout<<"\n Normal constructor ";
}
void setData(int x, int y)
{
a = x; b = y;
}
void showData()
{
std::cout<<"a = "<<a<<std::endl<<"b = "<<b<<std::endl;
}
Complex operator + (Complex c)
{
Complex temp;
temp.a = a + c.a;
temp.b = b + c.b;
return temp;
}
Complex(Complex &z)
{
std::cout<<"\n The copy constructor is called ";
}
};
int main()
{
Complex c1, c2, c3;
c1.setData(2, 3);
c2.setData(4, 5);
c3 = c1+c2;
c3.showData();
return 0;
}
在這裏,當我不明確寫複製構造函數,然後該程序給出正確的輸出。但寫完拷貝構造函數後,輸出就是垃圾值,我想知道爲什麼程序會產生垃圾值?
輸出實例:
Normal constructor
Normal constructor
Normal constructor
The copy constructor is called
Normal constructor a = -1270468398
b = 32769
請告訴 「什麼c3 = c1+2;
之後發生的事情是執行?」
其他人已經回答了你的版本不起作用的原因。我會補充說,沒有它的原因是編譯器會嘗試默認生成一個,如果你不這樣做的話。而在這個特定的情況下,默認的就好了。 –
另外,你爲什麼要用'c3 = c1.operator +(c2);'?來添加複數。是不是重載'+'操作符能夠寫入'c1 + c2'的重點? :) – Eutherpy