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;
}
继承中的同名成员
派生类的同名成员符屏蔽基类的同名成员(继承过来的同名成员空间还是存在的)如果需要使用基类成员,需要使用域解析符进行操作
重载:类中的函数重载必须在同一个类中进行
派生类中不能重载基类的函数,如果派生类重载了基类的函数,则会屏蔽所有基类的同名函数
基类中的静态成员函数被所有派生类所共享
相关文章推荐
- C++学习笔记:3.3.4 继承和组合混搭情况下,构造和析构调用顺序
- C++入门学习:虚析构、构造中不能实现多态、基类指针指向派生类数组的弊端
- 继承中的同名函数变量以及继承中的构造与析构
- C++学习笔记:继承中的构造与析构
- C++学习笔记:3.3.5 继承中的同名成员变量和函数
- C++学习笔记--继承中的构造与析构
- C++学习笔记--继承中的同名变量和同名函数
- C++ 学习(使用 using 改写继承类继承成员的性质)
- C++ 继承的构造与析构
- C++ 继承的构造与析构
- C++学习手记(三)——构造与析构
- c++超基础:继承的构造与析构(赋值兼容性原则)
- C++中虚函数的理解,以及简单继承情况下的虚函数的表!
- C++构造与析构(7) - 数据成员的初始化
- C++入门学习:多继承的概念及其二义性、虚继承的概念
- C++学习之构造析构的应用
- 继承中的构造和析构 继承和组合混搭情况下,构造函数、析构函数调用顺序研究
- C++构造,析构,友元类,对象,static成员,复制构造函数,运算符重载杂谈
- C++ 继承的构造与析构
- 【JavaSE学习笔记】面向对象_01(入门,匿名对象,成员变量,局部变量,封装,this,构造方法)