派生類的構(gòu)造函數(shù)
- 派生類對象包含基類 對象
- 執(zhí)行派生類構(gòu)造函數(shù)之前纠俭,先執(zhí)行基類的構(gòu)造函數(shù)
- 派生類交代基類初始化,具體形式:
構(gòu)造函數(shù)名(形參表):基類名(基類構(gòu)造函數(shù)實參表)
{
} - 例子
//
// main.cpp
// 派生類的構(gòu)造函數(shù)
//
// Created by MENGCHEN on 16/1/22.
// Copyright ? 2016年 MENGCHEN. All rights reserved.
//
#include <iostream>
using namespace std;
class base {
int a,b;
public:
base(int numA,int numB);
void PrintInfo();
};
base::base(int numA,int numB){
a = numA;
b = numB;
}
void base::PrintInfo(){
cout<<a<<"\n"<<b<<endl;
}
class derive:public base {
int c;
public:
derive(int numA,int numB,int numC);
void PrintInfo();
};
derive::derive(int numA,int numB,int numC):base(numA,numB)
{
c = numC;
}
void derive::PrintInfo(){
base::PrintInfo();
cout<<c;
}
int main(int argc, const char * argv[]) {
// insert code here...
derive a(1,2,3);
a.PrintInfo();
return 0;
}
- 調(diào)用基類構(gòu)造函數(shù)的兩種方式
- 顯式方式:
派生類的構(gòu)造函數(shù)中->基類的構(gòu)造函數(shù)提供參數(shù)
- 顯式方式:
derived::derived(arg_derived-list):base(arg_base-list)
- 隱式方式:
派生類的構(gòu)造函數(shù)中,省略基類構(gòu)造函數(shù)時
派生類的構(gòu)造函數(shù),自動調(diào)用基類的默認(rèn)構(gòu)造函數(shù)
- 派生類的析構(gòu)函數(shù)被執(zhí)行的時候,執(zhí)行完派生類的析構(gòu)函數(shù)后,自動調(diào)用基類的析構(gòu)函數(shù)
調(diào)用順序
- 創(chuàng)建派生類的對象時经伙,執(zhí)行派生類的構(gòu)造函數(shù)之前:
- 調(diào)用基類的構(gòu)造函數(shù)
->初始化派生類對象中從基類繼承的成員 - 調(diào)用成員對象類的構(gòu)造函數(shù)
->初始化派生類對象中成員對象
- 調(diào)用基類的構(gòu)造函數(shù)
- 執(zhí)行完派生類的析構(gòu)函數(shù)之后:
- 調(diào)用成員對象類的析構(gòu)函數(shù)
- 調(diào)用基類的析構(gòu)函數(shù)
- 析構(gòu)函數(shù)的調(diào)用順序與構(gòu)造函數(shù)的調(diào)用順序相反
class Skill{
public:
Skill(int n){}
};
class FlyBug:public Bug{
int nWings;
Skill sk1,sk2;
public:
FlyBug(int legs,int color ,int wings);
};
FlyBug:FlyBug(int legs,int color,int wings):Bug(legs,color),sk1(5),sk2(color){
nWings = wings;
}