首页 > 代码库 > 基类与派生类的构造函数

基类与派生类的构造函数

一、缺省构造函数的调用关系

通过下面的例子,我们来看一下基类与派生的构造函数的调用顺序。创建时先基类后派生类。销毁时先派生类后基类。

#include <iostream>#include <string>using namespace std;class CBase {    string name;    int age;public:    CBase() {        cout <<"BASE" << endl;    }    ~CBase() {        cout <<"~BASE" << endl;    }};class CDerive : public CBase {public:    CDerive() {         cout <<"DERIVE" << endl;    }    ~CDerive() {         cout <<"~DERIVE" << endl;    }};int main ( ) {    CDerive d;    return 0;}

 

二、有参数时的传递

当有参数时,参数必须传送给基类。注意例子中传递的方法(第8行、第19行)。

#include <iostream>#include <string>using namespace std;class CBase {    string name;public:    CBase(string s) : name(s) {        cout <<"BASE: " << name << endl;    }    ~CBase() {        cout <<"~BASE" << endl;    }};class CDerive : public CBase {    int age;public:    CDerive(string s, int a) : CBase(s), age(a) {         cout <<"DERIVE: " << age << endl;    }    ~CDerive() {         cout <<"~DERIVE" << endl;    }};int main ( ) {    CDerive d("小雅", 27);    return 0;}

 

三、祖孙三代的参数传递

当有三层继承时,参数要一层一层地传递下去(第30行、第19行、第8行)。

#include <iostream>#include <string>using namespace std;class CBase {    string name;public:    CBase(string s) : name(s) {        cout <<"BASE: " << name << endl;    }    ~CBase() {        cout <<"~BASE" << endl;    }};class CDerive : public CBase {    int age;public:    CDerive(string s, int a) : CBase(s), age(a) {         cout <<"DERIVE: " << age << endl;    }    ~CDerive() {         cout <<"~DERIVE" << endl;    }};class CSon : public CDerive {    string id;public:    CSon(string s1, int a, string s2) : CDerive(s1, a), id(s2) {         cout <<"SON: " << id << endl;    }    ~CSon() {         cout <<"~SON" << endl;    }};int main ( ) {    CSon s("小雅", 27,"8503026");    return 0;}

 

基类与派生类的构造函数