移动课程播放网站建设多少钱,可以做外国网站文章,漳州北京网站建设公司哪家好,深圳推广公司网站建设书模板3.3 派生类的构造与析构函数3.3.1 构造3.3.2 析构 3.3 派生类的构造与析构函数
3.3.1 构造 如果子类构造函数没有显式指明基类部分#xff08;基类子对象#xff09;的初始化方式#xff0c;那么编译器将会自动调用基类的无参构造函数来初始化基类子对象。 如果希望以有参… 3.3 派生类的构造与析构函数3.3.1 构造3.3.2 析构 3.3 派生类的构造与析构函数
3.3.1 构造 如果子类构造函数没有显式指明基类部分基类子对象的初始化方式那么编译器将会自动调用基类的无参构造函数来初始化基类子对象。 如果希望以有参的方式来初始化基类部分那么必须使用初始化列表来显式指明 子对象构造顺序 分配内存构造基类子对象按继承表顺序构造成员子对象按声明顺序执行子类构造函数代码 #include iostream
using namespace std;class Member{
private:int m_m;
public:Member(){cout Member() endl;}Member(int m) {cout Member(int) endl;m_m m;}
};class Base {
private:int m_i;
public:Base(){cout Base() endl;}Base(int i){cout Base(int) endl;m_i i;}
};class Derived:public Base{
private:int m_d;Member m_me;
public:Derived(){cout Derived() endl;//不指定作用域 默认调用无惨构造函数}Derived(int d):Base(d), m_me(d){ //指定作用域 就调用有参构造函cout Derived(int) endl;m_d d;}
};
int main (void) {Derived d1;Derived d2(100);return 0;
}3.3.2 析构 子类的析构函数无论自己定义的还是编译器缺省提供都会自动调用基类的析构函数完成基类子对象的销毁 子类对象销毁过程 执行子类析构函数代码析构成员子对象按声明逆序析构基类子对象按继承表逆序释放内存 #include iostream
using namespace std;class Member{
private:int m_m;
public:Member(){cout Member() endl;}Member(int m) {cout Member(int) endl;m_m m;}~Member(){cout ~Member() endl;}
};class Base {
private:int m_i;
public:Base(){cout Base() endl;}Base(int i){cout Base(int) endl;m_i i;}~Base(){cout ~Base() endl;}
};class Derived:public Base{
private:int m_d;Member m_me;
public:Derived(){cout Derived() endl;//不指定作用域 默认调用无惨构造函数}Derived(int d):Base(d), m_me(d){ //指定作用域 就调用有参构造函cout Derived(int) endl;m_d d;}~Derived(){cout ~Derived() endl;}
};
int main (void) {Derived d1;return 0;
}//输出结果
myubuntuubuntu:~/lv19/cplusplus/dy03$ ./a.out
Base()
Member()
Derived()
~Derived()
~Member()
~Base()