1.說明什麼是拷貝建構函式
對於普通的變數來說,拷貝是非常簡單的,但是對於類來說有很多成員變數,該怎麼拷貝呢?
int a = 10;
int b = a;//這裡複製是很簡單的
class cpp;
cpp a;
cpp a =b;//這裡如何複製呢
下面乙個列子:
#include #include using namespace std;
class cppex
void show()
~rect()
static int getcount()
};int rect::count = 0;
int main()
rect(rect &r)
~rect()
static int getcount()
};int rect::count = 0;
int main()
~rect()
};int main()
這個程式編譯的時候是沒有問題,問題出現在執行時。
原因是當rect1拷貝給rect2時,rect2的 p成員指標指的內
存和rect1物件的p成員指標指的記憶體是一樣的。當執行完之後
析構函式要析構rect1和2 所以肯定是錯誤的。
解決的辦法是深度拷貝。
三,深入拷貝
對成員不僅是簡單拷貝,還要分配記憶體等操作。
#includeusing namespace std;
class rect
rect(rect &r)
~rect()
};int main()
防止預設拷貝發生的方法,在private裡申明乙個拷貝建構函式
c 建構函式的一點見解
讀書讀到 建構函式這一部分,想到了些有趣的東西,寫下來以給大家分享 建構函式是乙個類初始化時呼叫的無返回值的特殊同名方法,當乙個類從另乙個類繼承 派生類的初始化過程其實就是向上不斷呼叫基類的建構函式這也是 net類庫的乙個重要特性,通過初始化乙個派生類 來完成一整個類庫的初始化,書上提到派生類預設的...
c 構造器的一點理解(2)
下邊對值型別的構造器進行一下說明 先說一下我對值型別構造器的初步印象。1 值型別一般情況先不需要有建構函式,clr保證其每個欄位都為0或者null,負責每個欄位的初始化。2 值型別可以有建構函式,但是必須是有參構造器,而且必須是被顯式的呼叫,否者不能被呼叫。3 如果值型別沒有建構函式,那麼clr保證...
對遞迴函式的一點小理解
對於遞迴函式,大家都很熟悉了,對於解析一些複雜資料結構方面,能夠使 非常簡潔,明了。從我的理解來說,遞迴函式一般效率比較低,而且自身特點導致的限制也不少 1.效率低 乙個非常簡單的例子數數吧,從1數到1m。對於迴圈實現的 遞迴實現 對於迴圈實現,函式相當於 對於遞迴實現,相當於 對於第一種實現,不需...