先看**,寫出結果
class a
public virtual void printfields(){}
}
class b:a
public override void printfields()
,y=",x,y);
} 問題,當執行如下**時,輸出的結果是多少?
b b =new b();
b.printfields();
基本原理:乙個帶有基類的型別的構造順序是:先執行成員變數的初始化表示式,然後執行父類的構造,最後呼叫自己的構造方法。
所以,結果是
再舉乙個例子,加深對這個原理的印象
先看繼承結構
public class ref
}
public class base
}
public class a:base
}
public class b : a
}
public class c : b
}呼叫如下**的輸出是
最後,向你推薦這個小工具,可以執行片斷式的**,而不用開啟visual studio 啟動乙個工程
如果你懷疑自己的判斷,拿起這個小工具,執行一下**,就明白了。
類的繼承中的乙個錯誤
基類 templateclass mstack 派生類1 template class s1 public mstack 派生類2 templateclass s2 public mstack 兩個派生類都實現了基類的虛函式,結果出現編譯錯誤 error c2995 bool mstack mpus...
c 程式設計 繼承中的析構函式和靜態成員
基於前乙個作業題目,改寫 animal 類和 dog 類 根據使用者輸入的數值,建立相應個數的 animal 物件和 dog 物件,然後再銷毀。用類的靜態資料成員記錄存活物件的數量。用建構函式和析構函式來更新存活物件的數量 10分 題目內容 編寫兩個類 dog類繼承animal類 animal類和d...
關於繼承的乙個問題
class a virtual a class b public a virtual b class c public b virtual c int fun int n char last4hex unsigned int num,char a 5 int main int argc,char a...