0
点赞
收藏
分享

微信扫一扫

C++核心编程 16继承(中)

书坊尚 2022-02-06 阅读 50

目录

一、继承方式

二、继承中的对象模型

三、继承中的构造和析构


一、继承方式

  1. 公共继承
    1. 父类中private到子类中访问不到
    2. 父类中protected到子类中protected
    3. 父类中public到子类中public
  2. 保护继承
    1. 父类中private到子类中访问不到
    2. 父类中protected到子类中protected
    3. 父类中public到子类中protected
  3. 私有继承
    1. 父类中private到子类中访问不到
    2. 父类中protected到子类中private
    3. 父类中public到子类中private

二、继承中的对象模型

        父类中私有属性,子类也继承了,但是编译器给隐藏了,隐藏访问不到

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;

class Base
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};
class Son :public Base
{
public:
	//父类中私有属性,子类也继承了,但是编译器给隐藏了,隐藏访问不到
	int m_D;
};
void test01()
{
	cout << sizeof(Son) << endl;//16
}
int main()
{
	test01();
	return 0;
}

三、继承中的构造和析构

  1. 继承中,先调用父类构造,再调用子类构造  析构是相反的
  2. 可以利用初始化列表语法 显示指定出调用父类的哪个构造函数
  3. 子类不会继承父类中 的构造和析构函数 只有父类自己知道如何析构和构造属性
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;

class Base
{
public:
	Base()
	{
		cout << "Base的构造函数调用" << endl;
	}
	~Base()
	{
		cout << "Base的析构函数调用" << endl;
	}
};
//继承中,先调用父类构造,再调用子类构造  析构是相反的
class Son:public Base
{
public:
	Son()
	{
		cout << "Son的构造函数调用" << endl;
	}
	~Son()
	{
		cout << "Son的析构函数调用" << endl;
	}
};
void test01()
{
	//Base b;

	Son s;
}

class Base2
{
public:
	Base2(int a)
	{
		this->m_A = a;
		cout << "Base的有参构造函数调用" << endl;
	}
	int m_A;
};
//代表继承
class Son2 :public Base2
{
public:
	//初始化列表
	//可以利用初始化列表语法 显示指定出调用父类的哪个构造函数
	Son2(int a) :Base2(a)
	{
		cout << "a="<<a << endl;
	}
};
void test02()
{
	Son2 s(100);
}

//子类不会继承父类中 的构造和析构函数 只有父类自己知道如何析构和构造属性
int main()
{
	test02();
	system("pause");
	return 0;
}
举报

相关推荐

0 条评论