首页 > 代码库 > 基类与派生类的构造函数
基类与派生类的构造函数
一、缺省构造函数的调用关系
通过下面的例子,我们来看一下基类与派生的构造函数的调用顺序。创建时先基类后派生类。销毁时先派生类后基类。
#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;}
基类与派生类的构造函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。