C++类继承和派生类08 继承家产上辈

【C++】继承总结 本博客介绍了继承的概念、继承的规则、基类与派生类对象的赋值转换、继承的作用域、隐藏(重定义)、派生类的默认成员函数、继承与友元的关系、继承与静态成员、继承与组合、对多继承、菱形继承和菱形虚拟继承 阅读详情

Day1:一句话说透:
权限总结:

  • 父亲的隐私儿子不能知道
    <cout << wife << end; //错!>
  • 他让你知道什么你就知道什么
    <cout << getwife()<<endl; >
    在这里插入图片描述

C++类继承和派生类

  • 什么是继承?
    • 继承就是子类一开始就包含了 父类的属性
  • 继承的写法
#include<iostream>
#include<string>
class father {
public:
protected:
private:
};
class son1 :public father {// a total of inheritance
public:
protected:
};
class son2 :protected father {// protected the inheritance
public:
protected:
};
class son3 :private father {// private inheritance 
public:
protected:

};
int main()
{
	father fr;
	son1 s1;
	return 0;
}
权限:
  • 继承方式只会增强父类属性在子类中的权限显示

在这里插入图片描述

#include<iostream>
#include<string>
using namespace std;
class father {
public:
	int a1=01;
	void print()
	{
		cout << name << "father\t" << money << endl;
	}
	// 提供接口访问私有
    string  getwife()
	{
		return wife;
	}
protected:
	int a2=02;
	string name="F";
	int money=100000;
private:
	int a3=03;
	string wife = "securet\n";
};
class son1 :public father {// a total of inheritance
public:
	void print()
	{
		//print();     ? why it is wrong in my IDE?
		cout << name << "Son \t" << money << endl;
		//cout << wife << end;          父亲的隐私儿子不能知道
		cout << getwife()<<endl;   
	}
protected:
private:
};
class son2 :protected father {// protected the inheritance
public:
	void print() {
		cout << name << " protected " << money << endl;// 保护属性
	}
	int num1 = 100;
protected:
	//int num2 = 100; 补课直接访问
private:
};
class son3 :private father {// private inheritance 
public:
	void print()
	{
		cout << name << " privated\t" << money << endl;
		cout << a1 << '\t' << a2 << '\t'<< endl;//a3  私有 不可访问
	}
protected:

};
int main()
{
	father fr;
	fr.print();
	fr.a1;// a2 a3  不可再类外属性  ,类内可以
	son1 s1;
	s1.a1;   // 共有属性
    // 不可访问s1.a2  a3
	s1.print();
	son2 s2;
    // 保护继承  a1 a 2a3 都不能访问
	cout << s2.num1 << endl;
	s2.print();
	son3 s3;
	 // a 123都不能访问
	s3.print();

	return 0;
}

在这里插入图片描述

  • 私有继承用于绝种 父类
    • 不想要产生孙子类时 就要用私有继承

继承中的构造函数

  • 父类的属性通过父类的构造函数初始化

  • 子类中的构造函数,必须要调用父类构造函数,必须采用初始化参数列表的方式

  • 单继承和多继承:

    • 单继承: 只有一个父类
    • 多继承: 两个或者两个以上的父类
  • 继承的属性,无论被继承多少次,所以类一般不会被继承很多层,会导致类的臃肿

    • 单继承
#include<iostream>
#include<string>
using namespace std;
class Parent {
public:
	Parent(string Fname,string Sname):Fname(Fname),Sname(Sname){}
	Parent() { cout << "父类无参构造函数" << endl; };
protected:
	string Fname;
	string Sname;
private:
};
class son : public Parent {
public:
	son() { cout << "这是子类无惨构造函数,优先调用父类无惨构造函数" << endl; }// 要这样写 父类必有 缺省或者无参构造

	// 子类构造函数             
	//父类属性必须调用父类构造函数并用初始化参数列表初始化
	son(string Fname, string Sname, string sonSname):Parent(Fname,Sname)
	{
		// 自己属性咋初始化都可以
		this->sonFname = Fname;
		this->sonSname = sonSname;
	}
	void print()
	{
		cout << "Father:" << Fname + Sname << endl;
		cout << "SOn    :" << sonFname + sonSname << endl;
	}
protected:
	string sonFname;
	string sonSname;
};
int main()
{
	son s{"白","江江","慕慕"/*son name*/};
	s.print();
	return 0;
}

在这里插入图片描述
多继承:
// 有无参构造 !无父类的必须调用 父类构造函数 并且用初始化参数列表
在这里插入图片描述

#include<iostream>
#include<string>
using namespace std;
//多继承
//欧阳
//多吉
//欧多阳吉
class MM {
public:
	//MM() { cout << "MM的无参构造函数 " << endl; }
	MM(string Fmmname, string Smmname) {
		this->Fmmname = Fmmname;
		this->Smmname = Smmname;
	}
protected:
	string Fmmname;
	string Smmname;
};
class GG{
public:
	//GG() { cout << "GG的无参构造函数 " << endl; }
	GG(string Fggname, string Sggname) 
	{
		this->Fggname = Fggname;
		this->Sggname = Sggname;
	}
protected:
	string Fggname;
	string Sggname;
};
// class child
class Girl:public MM,public GG{
public:
	//Girl(){}//  ALL 父类也得有无参数构造函数
	//  有无参构造可以在下面不初始化 父类,一般需要
	//  子类的可以直接初始化
	
	//Girl(string Fggname, string Sggname,string Fmmname,string Smmname) {
	//	this->Fgname = Fggname+Fmmname;
	//	this->Sgname = Sggname+Smmname;
	//}
	// 有无参构造 !无父类的必须调用 父类构造函数 并且用初始化参数列表
	Girl(string Fggname, string Sggname, string Fmmname, string Smmname)
		:MM(Fmmname, Smmname), GG(Fggname, Sggname)
	{
		this->Fgname = Fggname+Fmmname;
		this->Sgname = Sggname+Smmname;
	}
	//  给方法打印  孩子
	void print()
	{
		cout << "父亲:"<<Fggname + Sggname << endl;
		cout << "母亲:"<<Fmmname + Smmname << endl;
		cout << "女儿:"<<Fgname  + Sgname << endl;
	}
protected:
	string Fgname;
	string Sgname;
};

int main()
{
	//欧阳
    //多吉
    //欧多阳吉
	Girl girl("欧", "阳", "多", "吉");
	girl.print();
	return 0;
}

在这里插入图片描述
经验:各位 张三给孩子起名好听一点,
名字不要太短;

数据成员同名

  • 成员函数名同名
    类内 不做特别处理OR this,就近原则
    类名限定
  • 正常赋值调用
  • 非正常赋值调用
#include <iostream>
using namespace std;
class M
{
public:
	M(string name, int age) :name(name), age(age) {}
	void print()
	{
		cout << "M:";
		cout << name << "\t" << age << endl;
	}
protected:
	string name;
	int age;
};
class Girl :public M
{
public:
	//   同名了     父类 指定了参数,              子类初始化参数列表 传参
	Girl(string name, int age) :M("父类", 28), name(name), age(age) {}
	void print()
	{
		//不做特别处理,就近原则
		cout << name << "\t" << age << endl;
		//类名限定
		cout << M::name << "\t" << M::age << endl;
		//不做特别处理,就近原则
		M::print();// print HUIDIGUI 
	}
protected:
	string name;
	int age;
};
int main()
{
	//不做特别处理,就近原则
	//正常对象调用
	Girl  girl("girl", 18);//  子类调用子类方法
	girl.print();
	M m("mm", 28);
	m.print();

	//正常的指针调用  
	//就近原则
	Girl* pG = new Girl("newGirl", 19); 
	pG->print();
	pG->M::print();// 类名指定访问OK
	M* pM = new M("newM", 29);
	pM->print();

	//非正常的指针
	//1.允许子类对象初始化父类指针
	M* pMM = new Girl("newGirl", 49);
	pMM->print();		//父类的
	//在没有virtual情况下,看指针类型
	//在有virtual情况,看赋值对象
	//2.父类对象初始化子类指针,不安全
	//Girl* pGirl = new MM("newMM", 29); 错误
	//Girl* pGirl = (Girl*)pM;
	//pGirl->print();  引发
	return 0;
}

在这里插入图片描述
####### 贴代码
虚继承:---->菱形继承

//虚继承 --->菱形继承
#include <iostream>
using namespace std;
//虚继承 --->菱形继承
class A
{
public:
	A(int a) :a(a) {}
protected:
	int a;
};
class B :virtual public A
{
public:
	B(int a, int b) :A(a), b(b) {}
protected:
	int b;
};
class C :virtual public A
{
public:
	C(int a, int c) :A(a), c(c) {}
	void printC()
	{
		cout << a << endl;
	}
protected:
	int c;
};
class D :public C, public B
{
public:
	//菱形继承,必须调用祖父的构造函数
	D() :B(1, 2), C(3, 4), A(999)
	{

	}
	void print()
	{
		//只有一个a 只有一份
		cout << a << endl;
		cout << B::a << endl;
		cout << C::a << endl;
		printC();
	}
protected:

};
int main()
{
	D d;
	d.print();

	0;
}

在这里插入图片描述

总结

  • 构造 顺序:
    • 因为子类在父类基础上构建,所以需要有 父类 构造才能 构造子类构造函数
      +析构顺序:
      计算机里拆房子要遵循流程,一步一步拆;
      从 屋顶(子类)开始拆
子类对象初始化父类指针:

对象:比作财富
类 :比作需求思想
+ 子类财富可以满足 父类

父类对不能象初始化子类指针:

(有专门的方法后面将《可以说说思想教育》)
+ 父辈财富不能完全满足青年,所以我们要努力
————————人生苦短,我看看美女
在这里插入图片描述

C++继承和派生 1 继承概念 面向对象程序设计有4个主要特点:**抽象、封装、继承和多态性。**我们已经讲解了类和对象,了解了面向对象程序设计的两个重要特征一数据抽象与封装,已经能够设计出基于对象的程序,这是面向对象程序设计的基础。要较好地进行面向对象程序设计,还必须了解面向对象程序设计另外两个重要特征——继承性和多态性。这个文章主要介绍有关继承的相关知识,多态性将在后续文章当中讲解。 继承性是面向对象程序设计最... 阅读详情

相关推荐

嵌入式充电协议深度解析:从QC到PD3.1的技术演进与实战应用

本文深入解析了从QC到PD3.1的嵌入式充电协议技术演进与实战应用。通过电压谈判、协议芯片设计、Type-C接口优化等关键技术,详细介绍了快充协议在嵌入式系统中的实现挑战与解决方案,包括兼容性测试、EMC问题处理及空间限制创新设计,为开发者提供了宝贵的实践经验。

weixin_29194817的博客 419

C++继承:如何让代码‘继承‘百万家产?

下⾯我们看到Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。(因为翻译的原因,所以既叫基类/派⽣类,也叫⽗类/⼦类)

cbwjty的博客 779

STM32CubeMX和华为LiteOS Studio开发STM32

传统的STM32的开发通常使用Keil/IAR这类开发软件,随着物联网时代的到来,传统嵌入式的发展不断向物联网方向靠拢,而Keil/IAR这类开发软件无法满足IoT一站式的开发,华为LiteOS Studio结合STM32CubeMX可以快速,高效地进行物联网开发,本文提供一种开发思路及环境的配置方法。...

weixin_45680600的博客 2832

【C++】继承

在使用类时,我们将其作为一个抽象的概念来描述一类事物,从而实现对一类事物的管理。例如几类之间只有毫厘之差,只有个别的成员不同,若是每个类都重复定义,未免显得过于麻烦。这就不得不介绍面向对象三大特征中的继承了!!✨✨

Lin_Alpaca的博客 3022

rk3566-11.0新增device分区

1.增加块设备 2.修改根目录节点权限 3.开机启动自动挂载 增加块设备 1.修改parameter.txt文件,新增块设备大小及命名 device/rockchip/rk356x/rk3566_r/parameter.txt FIRMWARE_VER: 11.0 MACHINE_MODEL: rk3566_r MACHINE_ID: 007 MANUFACTURER: rockchip MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE

weixin_51115260的博客 3383

deepseek本地部署及应用部署指南

如果你找到的日志是[send] via NET/IB/0,则表示网络通信是通过IB网络的,但是没有开启GDRDMA技术,则会有大致5%的性能损耗(网传,未实测)。新增的环境变量配置,主要用于启用IB网络通信,而非使用以太网进行通信,详细的每一个参数的具体含义,可以在英伟达NCCL的官方网站上找到说明。下一步,我会对已经完成部署的模型进行压测,来探索系统的性能极限在哪里,以及如何在生产环境中何如进行进一步的性能优化,期待你的关注。

weixin_39797121的博客 2624

当C++继承遇上家族大戏:子类如何优雅“继承“父类的“家产“

C++继承机制就像家族传承,允许子类复用父类的成员变量和函数,避免代码冗余。

2301_79949691的博客 1156

TEA-Tiny Encryption算法在FPGA的实现

在FPGA原型中,我们定义了一个TEA_FPGA模块,该模块包含一个输入数据端口(plain)、一个输入密钥端口(key)和一个输出数据端口(cipher)。在模块中,我们通过32轮的循环处理来实现TEA算法的加密过程,并将最终结果存储在cipher变量中。由于FPGA硬件的高速性能,这种基于HDL的TEA算法实现可以在短时间内完成大量的数据加密处理,从而提高加密效率和性能。总之,在FPGA中实现TEA算法可以大大提高加密效率和性能,通过使用硬件描述语言HDL来实现可以更高效、更快速地完成数据加密操作。

BitSlinger的博客 272

【C++】类和对象之继承

类和对象-继承

2301_80418172的博客 881

神经形态芯片:IBM TrueNorth技术详解以及应用案例

2018年的一项演示中,机器人使用TrueNorth处理了复杂的路径规划,功耗仅为传统系统的1/10。它通过模仿人脑的结构,解决了传统芯片在功耗和并行性上的痛点,并在图像识别、物联网和机器人等领域展现了强大潜力。:不同于传统芯片的时钟驱动,TrueNorth是事件驱动的。例如,工厂中的振动传感器使用TrueNorth检测设备故障的早期迹象,实现了更高效的维护策略,避免了停机时间。:在医疗领域,TrueNorth可以用于可穿戴设备,比如一个智能助听器,它能过滤噪音并增强特定声音,功耗低到可以用纽扣电池供电。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2477

控制算法研发工程师(博士)职位深度解析与面试指南

摘要:广东万和新电气股份有限公司招聘控制算法研发工程师(博士),工作地点佛山顺德。职位要求2026届博士学历,电子信息工程或控制科学与工程专业。主要职责包括:1)燃气热水、热泵等系统的电控软件设计与优化;2)开发PID、模糊控制、ADRC、MPC等智能算法,应用于恒温控制、变频调节等场景。重点考察算法研发能力、系统稳定性优化及嵌入式实现经验。该职位提供三年资深工程师培养计划,需具备扎实的控制理论基础和工程实践能力,能够处理非线性系统、多工况自适应等复杂控制问题。

郑伟强dev的专栏 139

【c++】继承深度解剖

你肯定听过某男子继承百亿家产吧,继承的东西就等于自己的,在c++中也继承,所继承的儿子,都有父类的属性,这个属性可能是父类的成员函数,成员变量...。我们直接再创建一个类就可以了定义属性,那我们为什么需要继承类的属性呢?今天由问题的引出,我们来探讨c++继承的方便。⭐主体💫很多人说C++语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承。否则在复杂度及性能上都有问题。

AAlykk的博客 1571

Python接入企业微信群机器人图文教程,实现恐贪指标自动触发微信消息提醒功能!Python 企业微信 群机器人 消息提醒 Webhook 企业微信接口

✅ 企业微信群机器人的添加方式;✅ 如何获取 Webhook 地址;✅ Python 如何用 requests 发消息;✅ 如何在实际业务中触发自动提醒;这种方式不仅适合个人开发者、测试人员,也适用于小团队、运维通知等场景,部署简单、触发灵活、响应及时!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 915

C++ 继承

介绍C++的单继承、多继承、菱形继承、虚继承和其原理

cp 2015

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++类与对象-继承和多态(超全整理)

前面讲类与对象上中下时,所讲的都是在单个类中相关的语法(初始化列表、this指针、静态成员、常函数和常对象......)或者使两个不同的类产生联系的语法(友元)。而本文虽然也是类与对象的内容,但和之前的有所区别。继承和多态这两个技术解决的是由单个类衍生出多个与此相似或相关的类。例如继承,子类继承父类的相关属性进而实例化出属于子类的对象,这极大地减少了相似的代码量、提高了执行效率。下面会分别向大家介绍继承和多态的语法,最后会附上一个项目来更好地让大家上手应用。

AMO524的博客 1026

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

c++:继承(超详解)

目录一:什么是继承二:继承的格式继承的总结:二:子类和父类(基类和派生类)1.子类和父类的相互赋值:2.同名的成员变量3.同名成员函数三:子类中默认的成员函数1.构造函数2.析构函数3.拷贝构造4.赋值运算符重载 四:单继承和多继承单继承: 多继承:菱形继承解决方法一:解决方法二:单继承和多继承的总结:定义:继承(inheritance)机制是面向对象程序设计中使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生的新类,称派生类(或子类),被继承的类称基类(或父类)

qq_62718027的博客 8万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

c++----继承(初阶)

继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类。继承呈现了⾯向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复⽤,继承是类设计层次的复⽤。这样看起来也可以理解为师傅与徒弟之间的关系,因为师傅把自己毕生所学传递给了徒弟,然后徒弟可以在此基础上进行增添自己的个人想法进行扩展。你这就是相当于个人的解释方法,当然也很多人认为是父与子的关系,因

2302_80318761的博客 1800

继承

概念:继承是面向对象的三大特性之一。继承在现实生活中的说法就是继承了家里的家产,继承了家里的家业,从长辈那直接得到,而在C++中则是解决一些复用的问题,内层次的复用,它允许我们在保持原有类特性的基础上进行拓展,增加一些成员变量或成员函数,产生新的类,该种类就叫派生类。一句概括就是继承是类设计层次的复用。

muzi_liii的博客 1279

【C++】继承的底层思想

本文介绍继承的特性和底层思想

就业知识博客 842

C++之继承

继承是什么? 在原有的类的基础上建立的新的类,称为继承。就像家产的继承一样,被继承的类称为基类(父类),新生成的类称为派生类(子类)。

Code_beeps的博客 379

【类继承和多继承】

这里一个派生类学生的对象s,和一个基类person基类的对象man,引用rman,Preson* 的pman,这里s对象给man对象赋值,就把派生类中基类的对象那部分赋值给man对象,如果是rman引用,就把派生类中基类那部分的对象起别名,如果是指针pman,就指向派生类中基类的那一部分的地址。在继承中,如果基类和派生类都有同名的函数,同名的函数构成了一种隐藏的关系,只要是函数名相同了,不管类型还是参数的不同,都构成了隐藏,他们不构成重载,因为虽然同样的函数名,但他们却是不同的作用域。

m0_72818727的博客 194

[c++] public继承、protected继承、private继承

前言: public、protected、private 这三个权限修饰字既可以用来修饰成员变量和成员函数,也可以用来修饰继承类型。下面将讨论继承类型。 成员变量和成员函数的访问权限: 派生类对基类成员的访问权限,与是public 、 protected 、 private继承类型没关系,仅仅与基类中成员的权限属性有关系: 派生类能访问基类的public和protected成员,不能访问private成员。 继承权限是用来控制 “派生类的使用者” 对基类成员的访问权限: 这里涉及到两个..

ykun089的博客 608

C++继承

student这个类继承了Person这个类,student继承的类称为被称为派生类或子类Person被继承的类称为基类或父类。也就是说student继承之后Person的成员函数和成员变量是student的一部分,其实就是复用了Person这个类。2、继承关系和访问限定符1.很多人说C++语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承。否则在复杂度及性能上都有问题。

2301_76227083的博客 272

C++学习笔记(四):类与对象--友元与继承

友元函数 类的友元函数一般定义在类外部,可以是定义在全局的函数,也可以是其他类的成员函数,但他们有权访问类的所有私有(private)成员和保护(protected)成员。 尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。 友元定义在全局的函数 //类声明 class example_A { private: //私有成员 int a; //成员 int b; //成员 friend void Fren

太白的博客 2578

C++三大特性之继承(一)

C++三大特性之一的继承,讲解继承的引入原因,继承的访问限定符,默认继承的访问权限,基类和派生类对象赋值转换,继承中的作用域

weixin_57761086的博客 1458
上一篇: C++默认函数和类的组合07
下一篇: C++虚函数和多态09 提高代码复用率
燕子01
博客等级 码龄6年 8粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值