您的位置:首页 > 编程语言 > C语言/C++

C++入门学习:继承中的构造和析构以及同名成员情况

2018-03-19 12:38 543 查看

继承中的构造和析构

类中成员的初始化:成员属于那个类,则必须要该类对其初始化,即调用该类的构造函数对其进行初始化(在对象初始化列表中显示调用)
派生类构造的顺序:先调用父类构造函数初始化父类成员,再调用自己的构造函数对自己的成员进行初始化
派生类中有其他类的对象的情况下的构造顺序:
1、调用父类构造函数
2、调用类中其余类对象的构造函数
3、调用派生类自己的构造函数
#include <iostream>

using namespace std;

class Test
{
public:
Test(int a)
{
cout << "Test 构造函数被调用" << endl;
}
~Test()
{
cout << "Test 析构函数被调用" << endl;
}
};

class A
{
public:
A()
{
cout << "A的 无参构造被调用" << endl;
}
A(int a, int b)
{
a1 = a;
a2 = b;
cout << "A的构造函数被调用" << endl;
}
~A()
{
cout << "A的析构函数被调用" << endl;
}
private:
int a1;
int a2;
};

/*
类中成员的初始化:成员属于哪个类,则必须要该类对其初始化
======>必须调用该类的构造函数对其进行初始化
======> 如何调用基类的构造函数?
======> 在对象初始化列表中显示调用

派生类构造顺序:1、先调用父类构造函数构造父类成员
2、再调用自己的构造函数对自己的成员进行初始化
析构的顺序和构造顺序相反

组合和继承在一起的时候构造的顺序:
1、先调用父类构造函数
2、再调用组合对象的构造函数
3、调用派生类自己的构造函数
析构的顺序和构造的顺序相反
*/
class B:public A
{
public:
B(): t1(1), t2(2), A(1,2)
{
cout << "B的构造函数被调用" << endl;
}
~B()
{
cout << "B的析构函数" << endl;
}
private:
Test t1;
Test t2;
};

class P1
{
public:
P1()
{
cout << "P1 的构造函数被调用" << endl;
}
~P1()
{
cout << "P1 的析构函数被调用" << endl;
}
};

class Child:public P1
{
public:
Child()
{
cout << "Child 的构造函数被调用" << endl;
}
~Child()
{
cout << "Child 的析构函数被调用" << endl;
}
};

int main()
{
//A a;
//B b;
Child c1;
return 0;
}

继承中的同名成员

派生类的同名成员符屏蔽基类的同名成员(继承过来的同名成员空间还是存在的)
如果需要使用基类成员,需要使用域解析符进行操作

重载:类中的函数重载必须在同一个类中进行
派生类中不能重载基类的函数,如果派生类重载了基类的函数,则会屏蔽所有基类的同名函数

基类中的静态成员函数被所有派生类所共享
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: