1樓:匿名使用者
首先你自己new b(*this) 呼叫的應該是b的拷貝建構函式。但是你沒有寫,所以系統使用預設的。
系統的預設b的拷貝構造先呼叫a的預設構造(因為你沒寫),但是a也沒有。
因此採用普通變數的初始化拷貝。即拷貝count(int)成員,如果不是基本型別呼叫相應汪斗的拷貝建構函式。
所以會拷貝出乙個b物件的基類子物件a,其count 是1,然後繼續構造b的本來部分。
這樣成功new出乙個b,其count 是1,不是用建構函式中:count(1)產生的,而是系統直接複製的*this 中count 的值,因此整個過程不呼叫任察敬何的你寫的建構函式。不會有列印資訊。
個人認為:解構函式中最好杜絕調敗陵慎用虛擬函式。
2樓:菜鳥學c加加
1,把b *p = new b(*this);改成b *p = new b;就是正常如睜理解了。
但是*this作為引數沒有見過,同等指中答案。
2,是因為給p分配的記憶體不是在棧中,而且最後給p分配的記憶體位址傳給了a1。所以後面delete a1;時而析構。
這個問題以前還沒有注意到,同唯橡山關注答案。
c++構造和解構函式的特徵和繼承的概念
3樓:文庫**
(1)繼承就是在已有的類基礎上,新增新成員,構成乙個新的類,新類中的成員包括新加成員和繼承過來的成員。被繼承的類稱為基類、父類,新類稱為派生類、子類。定義派生類時,用冒號表示基類,用public、private、protected表示公有、私有、保護三種繼承方式。
不寫繼承方式時,用class定義的派生類預設私有繼承,用struct定義的派生類預設公有繼承。
2)建構函式名必須與其類名相同;
建構函式不能包括任何返回值,設定void型別;
乙個類可以有多個建構函式,也可以沒有建構函式,當類沒有建構函式時,編譯器會自動為其建立乙個預設的建構函式;
建構函式可以有引數,也可以沒有。
3)解構函式的名字前面必須以波浪線(~)開始,其餘部分與類名相同;
和建構函式一樣,解構函式不能包含任何返回值;
乙個類只允許有乙個解構函式,若省略了解構函式,編譯器會自動建立乙個解構函式;
解構函式不能有任何引數;
執行系統在物件操作越界時自動呼叫乙個類的解構函式。
c++構造和解構函式的特徵和繼承的概念
4樓:多美的新一天
1、c++的建構函式,函式名與類名同名。一旦該類分配記憶體,就自動啟用建構函式;
解構函式函式名是在類名譬如class1前面加上~,解構函式是撤銷該類記憶體之前,最後乙個執行,且是自動啟用的函式。他們都沒有返回值。
2、繼承是子類的成員函式可以繼承父類的成員--成員變數或成員函式(private屬性的不能繼承)
求解一道C語言題,求解一道C語言題目
不考慮效能優化,只考慮功能可以這麼寫 include stdio.h include string.h define max str len 128int main char str2 max str len scanf s s str1,str2 for i 0 i strlen str1 i e...
求解一道c 程式設計題,求解一道簡單的C語言程式設計題
麼誒節奏 include using namespace std int search int p1,int n,int p2 void print int p,int n int main int arr1 10 int arr2 int count search arr1,10,arr2 pri...
C語言的一道題,求解釋,c語言一道題,求解釋
輸出的結果是 4294967293 分析如下 變數i是有符號數,i 3,而負數在記憶體中是以其補碼的形式存放的,3的補碼 int型的佔4個位元組32位 1,111 1111 1111 1111 1111 1111 1111 1101,其中最高位是符號位 0為正,1為負 而變數ud是無符號位的,那麼就...