C++继承

//继承 :class 子类 : 继承方式 父类
//子类也叫派生类 父类也叫基类
//继承方式 : 公共继承 保护继承 私有继承
//父类当中的私有的 无论子类使用哪一种继承方式 都不可以访问

//父类当中所有非静态成员属性都会被子类继承下去
//父类当中的私有成员属性 是被编译器给隐藏了 所以说是访问不到的 但是确实是被继承下去了

//继承当中的构造和析构的顺序 :先进后出 先有父类的构造 再有子类的构造 然后先去析构子类 再去析构父类

//继承当中的同名的成员处理方式:
//如果出现重名 你直接访问的就是自身的
// 子类对象.m_A 和 子类对象.父类对象::m_A (其中m_A为重名) 加上作用域
//如果说 想要通过 子类对象 访问到父类当中的同名成员 需要加作用域
//---同名的属性

//如果说子类当中出现和父类同名的成员函数 子类的同名成员函数就会隐藏父类当中的所有同名成员函数

//如果想要去访问到父类当中被隐藏的同名成员函数 需要加作用域

//静态成员属性 类内部定义 类外初始化
//可以通过对象 或者 类 直接去访问

//同名静态成员处理:

//这里访问的是成员方法:
//通过对象访问1:
//子类对象.func(); 子类对象.父类名字::func();
//通过类名访问2:
//子类名字::func(); 子类名字::父类名字::func();

//这里访问的是成员属性:
//通过对象访问1:
//子类对象.属性 子类对象.父类名字::属性
//通过类名访问2:
//子类名字::属性 子类名字::父类名字::属性

//子类如果出现和父类同名的静态成员函数 也会隐藏父类当中的所有同名成员函数
//如果想要去访问 父类当中被隐藏的同名成员 需要加作用域

//多继承语法
//C++允许一个类可以去继承多个类
//多继承可能会出现 父类当中的同名成员出现 需要加作用域区分

test:
//菱形继承
//两个派生类继承同一个基类
//又有某个类同时继承两个派生类

//利用虚继承 可以解决
//继承之前 加上关键字 virtual 变为虚继承
//Animal类就称为虚基类

//菱形继承主要带来的问题就是:子类继承了两份相同的数据 造成了资源浪费

点击查看代码


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

class Animal {
public:
	int m_Age;
};

class Sheep :virtual public Animal {
};
class Tuo:virtual public Animal{
};
class SheepTuo :public Sheep, public Tuo {
};
void test01()
{
	SheepTuo st1;
	
	st1.Sheep::m_Age = 190;
	st1.Tuo::m_Age = 191;

	cout << st1.Sheep::m_Age << endl;
	cout << st1.Tuo::m_Age << endl;
	cout << st1.m_Age << endl;//利用虚继承之后只有一个

}
int main() {
	test01();
	return 0;
}


 

![image]
(https://img2022.cnblogs.com/blog/2928212/202207/2928212-20220726170451916-1418264427.png)

posted @   MegaDataFlowers  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
点击右上角即可分享
微信分享提示