IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> C++笔记-继承 -> 正文阅读

[开发工具]C++笔记-继承

目录

继承方式

继承中构造和析构顺序?

继承同名成员处理方式?

同名静态成员处理方式

多继承

菱形继承


继承的好处:减少重复代码

语法class 子类:继承方式? 父类

继承方式

  • 公共继承
  • 保护继承
  • 私有继承

父类中所有非静态成员属性都被子类继承了,私有成员访问不到是因为被编译器隐藏了?

派生类对基类成员的访问形式主要有以下两种:

  • 内部访问:由派生类中新增的成员函数对基类继承来的成员的访问。
  • 对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问。

继承中构造和析构顺序?

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

class A{
public:
	A() {
		cout << "A类对象构造中..." << endl;
	}
	~A() {
		cout << "析构A类对象..." << endl;
	}
};

class B : public A{
public:
	B() {
		cout << "B类对象构造中..." << endl;
	}
	~B(){
		cout << "析构B类对象..." << endl;
	}
};

int main() {
	B b;
	return 0;
}
A类对象构造中...
B类对象构造中...
析构B类对象...
析构A类对象...

继承同名成员处理方式?

  • 访问子类同名成员,直接访问即可(子类对象可以直接访问子类成员)
  • 访问父类同名成员,需要加作用域(子类对象加作用域可以访问父类同名成员)

同名成员属性:

class Base {
public:
	Base() {
		A = 100;
	}
	int A;
};

class Son :public Base {
public:
	int A;
	Son() {
		A = 200;
	}
};

int main() {
	Son p;
	cout << p.A;
	cout << p.Base::A;
}

同名成员函数:

如果子类中出现和父类同名的成员函数,子类的同名成员会隐藏掉父类中所有同名成员函数(所以也不能靠参数来区分了,想调用父类函数时必须写上作用域)

class Base {
public:
	
	void func() {
		cout << "Base" << endl;
	}
};

class Son :public Base {
public:
	void func() {
		cout << "Son" << endl;
	}
};

int main() {
	Son p;
	p.Base::func();
	p.func();
}

同名静态成员处理方式

  • 访问子类同名成员,直接访问即可
  • 访问父类同名成员,需要加作用域

同名静态成员属性

  • 通过对象访问? Son.Base::A
  • 通过类名访问? Son::Base::A(第一个双冒号:通过类名的方式来访问,第二个双冒号:访问Base作用域下)

同名静态函数

  • 通过对象访问? Son.func()
  • 通过类名访问? Son::Base::func()? (第一个双冒号:通过类名的方式来访问,第二个双冒号:访问Base作用域下)

多继承

语法:? class 子类:继承方式? 父类1,继承方式? ?父类2

当父类中出现了同名成员,需要加作用域区分? ?s.Base1::A? ? ?s.Base2::A

菱形继承

  • 两个派生类继承同一个基类
  • 又有某个类同时继承这两个派生类

?两个父类拥有相同数据,需要加以作用域区分

一个数据有一份就可以,而菱形继承导致数据有两份,资源浪费

利用虚继承可以解决菱形继承的问题:

在继承之前加上关键字Virtual变为虚继承

此时Animal类称为虚基类

?原本:

?变成虚继承:

这样子相当于只有一个Age了?

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:42:38  更:2021-10-11 17:44:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:47:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码