2014-10-06 50 views
0

假設我們有一個名爲Animal的類型結構,並且我們有兩個名爲Cat和Dog的對象。 我正在嘗試編寫一個代碼,聲明一個名爲Cat的對象,並將其數據成員初始化爲與另一個名爲Dog的對象相同的值。這兩個對象都是struct Animal類型。我想知道是不是Animal Cat = Dog。或者 Animal Cat = &Dog。 我想知道它們之間有什麼不同。將對象及其數據成員複製到另一個對象

+4

只有一個人會編譯。使用那個。 – 2014-10-06 01:54:17

+0

狗和貓從動物身上繼承嗎?或者他們是動物的實例嗎? – Kam 2014-10-06 02:01:56

+0

@Kam:「兩隻** **叫做貓和狗」。 – 2014-10-06 02:02:58

回答

3

你第一次嘗試就是對的。變體可以在這裏看到:

Animal cat("silvester"); 
Animal dog("fido"); 
cat = dog; 

在你的第二個例子,你實際上採取的地址「狗」,並將其分配給非指針類型(動物)。第二個版本不會編譯,因爲類型不匹配。

區別是巨大的。我們正在討論對象和指向對象的指針。指針的值是內存中的地址,而對象的值是對象的數據本身。

0

這兩個語句都是copy initialization的示例。匹配等於右邊的表達式類型的構造函數是被選中的。所以,你的問題實際上是關於如何將參數傳遞給通過引用接受它們的函數。答案是,它看起來完全像是通過價值傳遞。 &前綴獲取變量的地址,並在將指針傳遞給該函數時使用。所以,如果你的Animal有一個像這樣的構造函數Animal::Animal(Animal*),它會被Animal Cat = &Dog調用。

相關問題