派生类的构造函数
- 派生类对象包含基类 对象
- 执行派生类构造函数之前,先执行基类的构造函数
- 派生类交代基类初始化,具体形式:
构造函数名(形参表):基类名(基类构造函数实参表)
{
} - 例子
//
// main.cpp
// 派生类的构造函数
//
// 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;
}
- 调用基类构造函数的两种方式
- 显式方式:
派生类的构造函数中->基类的构造函数提供参数
- 显式方式:
derived::derived(arg_derived-list):base(arg_base-list)
- 隐式方式:
派生类的构造函数中,省略基类构造函数时
派生类的构造函数,自动调用基类的默认构造函数
- 派生类的析构函数被执行的时候,执行完派生类的析构函数后,自动调用基类的析构函数
调用顺序
- 创建派生类的对象时,执行派生类的构造函数之前:
- 调用基类的构造函数
->初始化派生类对象中从基类继承的成员 - 调用成员对象类的构造函数
->初始化派生类对象中成员对象
- 调用基类的构造函数
- 执行完派生类的析构函数之后:
- 调用成员对象类的析构函数
- 调用基类的析构函数
- 析构函数的调用顺序与构造函数的调用顺序相反
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;
}