#include <iostream>
#include <cstring>
using namespace std;
class foo {
int number;
char string[20];
public:
foo() {
set(3, 5);
}
void set (int a, int b) {
number = a + b;
strcpy(string, "summer");
}
foo (const foo & c) {
}
void output() {
cout << number << ',' << string << endl;
}
};
void showyanothing (foo);
int main() {
foo a, b;
showyanothing(a);
a.output();
b.output();
}
void showyanothing (foo z) {
cout << "... how are you?\n";
z.output();
}
... hello ...
... how are you?
-1218897013,l·ôl·Y·ôl·À
8,summer
8,summer
與-1218897013,l·ôl·Y·ôl·À
的線,這些都是在由拷貝構造創建的對象的Z值。如果我將我的拷貝構造函數更改爲以下內容,則輸出對象z將生成10, summer.1.2.3
。爲什麼?神奇的價值從哪裏插入Z?
新的拷貝構造函數
foo (const foo & c) {
number = c.number + 2;
strcpy(string, c.string);
strcat(string, ".1.2.3");
}
新的輸出:
... how are you?
10,summer.1.2.3
8,summer
8,summer
在拷貝構造函數,我感到困惑的是,爲什麼c.number等同於8和c.string等號到了夏天?它從哪裏獲得這些價值?
我明白,但不是foo&c引用z,其中z是空的,所以c.number什麼都不是?只是困惑如何c.number持有8和c.string持有夏季。 – eveo 2013-03-11 03:59:30
如果您在代碼中看到既有默認構造函數也有複製構造函數。創建對象時將調用默認的構造函數。然後,當進行函數調用時,調用複製構造函數(查看函數簽名)。現在比較兩個代碼:) – NirmalGeo 2013-03-11 04:04:56