2010-12-21 20:44
派生子類會繼承基類的所有成員,除了建構函式和析構函式。也就是說子類是無法繼承父類的建構函式和析構函式的.因此,子類對於從父類繼承過來的成員變數,若不想自己寫建構函式初始化時,就只能先初始化父類中的成員變數,然後再繼承過來。如以下程式中:
子類student1中的構造方法只有對新增成員int age和string addr的初始化操作,對於從父類繼承過來的成員num,name,***無初始化語句,但子類又不能繼承父類的構造方法,要麼就另外再寫乙個初始化語句,可這樣操作就造成了重複性語句, 此時就得通過student1(int n,string nam,char s,int a,string ad):student(n,nam,s) 先初始化父類成員變數,從而間接初始化子類從父類繼承過來的成員變數。
#include
#include
using namespace std;
class student
public:
student(int n,string nam,char s)
num=n;
name=nam;
***=s;
~student(){}
protected:
int num;
string name;
char ***;
class student1:public student
student1(int n,string nam,char s,int a,string ad):student(n,nam,s)
age=a;
addr=ad;
void show()
private:
int age;
string addr;
int main()
student1 stud1(10010,"wang",'f',19,"beijing road,shanghai");
以上是對基類student及子類student1的定義。
請注意派生子類建構函式首行的寫法:
student1(int n,string nam,char s,int a,string ad):student(n,nam,s)
其一般形式為
派生類建構函式名(總引數列表):基類建構函式名(引數列表)
派生類中新增資料成員初始化語句;
冒號前面的部分是派生類建構函式的主幹,它的總參數列列中包括基類建構函式所需的引數和對派生類新增的資料成員初始化所需的引數。冒號後面的部分是要呼叫的基類建構函式及其引數。
基類建構函式後面括號內的參數列列中只有引數但無引數型別,因為在這裡不是定義基類建構函式,而是呼叫基類建構函式,因此這些引數是實參而不是形參。他們可以是常量、全域性變數和派生類建構函式總參數列中的引數。
從以上可以看到:在main函式中,建立物件stud1時,有5個引數,其中前3個是用來傳遞基類建構函式的,後2個用來對派生子類所增加的資料成員初始化。
上例中也可以將派生類建構函式在類外定義,
student1::student1(int n,string nam,char s,int a,string ad):student(n,nam,s)
age=a;
addr=ad;
注:在類中對派生子類建構函式作宣告時不需要:student(n,nam,s),只有定義式才用到。
以上例子中,呼叫基類建構函式時的實參是從子類建構函式的總參數列中獲得的,也可以不從那傳遞,直接使用常量或全域性變數,如:
student1(string nam,char s,int a,string ad):student(10010,nam,s)
這樣父類的n預設初始化為10010,子類直接把n=10010繼承過來,因此所以不用寫。
QT中用父類建構函式初始化子類的成員變數
分類 c 技術總結 2012 02 27 17 11 998人閱讀收藏 舉報 qtstring class 2010 2010 12 21 20 44 派生子類會繼承基類的所有成員,除了建構函式和析構函式。也就是說子類是無法繼承父類的建構函式和析構函式的.因此,子類對於從父類繼承過來的成員變數,若不...
初始化子類, 父類的建立次數
兩個類同時繼承乙個父類,在建立兩個子類的時候,父類是被建立兩次的.測試 如下 父類public class superclass 子類1 public class subclass1 extends superclass 子類2 public class subclass2 extends supe...
c 子類建構函式初始化及父類構造初始化
我們知道,構造方法是用來初始化類物件的。如果在類中沒有顯式地宣告建構函式,那麼編譯器會自動建立乙個預設的建構函式 並且這個預設的建構函式僅僅在沒有顯式地宣告建構函式的情況下才會被建立建立。1.父類沒有宣告建構函式 1 子類也沒有宣告自己的建構函式,則父類和子類均由編譯器生成預設的建構函式。2 子類中...