關於運算符重載問題,以及複製構造函數等。這些都是十分容易讓人的凌亂的東西,所以我覺得,有必要好好的梳理一下他們。
1.重載賦值(=)運算符
關於重載賦值函數,一個容易混亂的地方便是,到底是誰賦值給誰?以及,怎麼賦值? 爲何和複製構造函數那麼像,他們之間又有什麼區別?
Book & Book::operator=(const Book &b){
if( this != &b){
this->price = b.price;
this->num = b.num;
//爲bookmark賦值
int *bmTemp = new int[b.num];
for(int i=0; i<b.num; i++){
bmTemp[i] = b.bookmark[i];
}
this->bookmark = bmTemp;
}
return *this;
}
1.賦值給誰? 我的方法便是,這樣理解Book::operator=(Book &) 就是 Book.operator=(Book & )
所以對於Book的兩個對象,比如java 和ccc ,ccc=java 的意思其實是ccc.operator(java);
2.重載賦值語句中需要寫什麼?
和複製構造函數類似,重載賦值語句是有參數的。參數是值得來源
重載賦值語句的必要是,數據成員有指針,並且存在動態內存分配的時候,賦值的時候,不可以只是簡單的將指針的值賦值過去,而是需要爲賦值的指針分配存儲值得空間。所以,主要的操作便是對this->的指針進行動態內存分配,並將值賦值過來(記住,當自己寫重載賦值函數的時候,不要丟掉別的部分,雖然在默認的賦值函數中,他們是正確的,但自己重寫函數的時候,默認構造函數便不再調用!)
認識到 賦值函數中的this指的是 = 號左邊被賦值的。
2.複製構造函數
複製構造函數,首先,他是構造函數的範疇,是用來構造對象的。
其次,便要意識到,在複製構造函數中的this 指的是,即將創建的這個對象的屬性,而複製構造函數的參數,是你複製的模板(這個和重載賦值語句很像)
再而,複製構造函數沒有return;