第5章 【例题】(部分~)

【例5.1】使用继承的案例

//【例5.1】使用继承的案例
#include <iostream>
#include <string>
using namespace std;
class Person{	//声明基类
	public:
		Person(string name1,string id_number,int age1);
		~Person();
		void show();	//在基类中定义了成员函数show()
	private:
		string name;	//姓名
		string id_number;	//身份证号
		int age;	//年龄
};
Person::Person(string name1,string id_number1,int age1)
{
	name=name1;
	id_number=id_number1;
	age=age1;
}
Person::~Person()
{
}
void Person::show()
{
	cout<<"\n 姓名:"<<name;
	cout<<"\n 身份证号:"<<id_number;
	cout<<"\n 年龄:"<<age;
}
class Student:public Person{	//声明公有派生类Student
	public:
		Student(string name1,string id_number1,int age1,int credit1);
		~Student();
		void show();	//在派生类中,重新定义了成员函数show()
	private:
		int credit;		//学分
};
Student::Student(string name1,string id_number1,int age1,int credit1)
	:Person(name1,id_number1,age1)	//定义派生类构造函数时,缀上基类的构造函数
{
	credit=credit1;
}
Student::~Student()
{
}
void Student::show()
{
	Person::show();	//调用基类Person的成员函数show()
	cout<<"\n 学分:"<<credit<<endl;
}
int main()
{
	Student stu1("黎明","110105**********63",19,166);
	stu1.show();	//调用的是派生类中的成员函数show()
	//stu1.Person::show();//不妨加上这条语句,是可以通过对象访问基类的公有成员的,因为是公有继承
	return 0;
}

 

【例5.2】一个私有继承的例子 

//【例5.2】一个私有继承的例子
#include <iostream>
#include <string>
using namespace std;
class Person{	//声明基类
	public:
		Person(int age1)
		{	age=age1;	}
		void setage(int age1)
		{	age=age1;	}
		void show();	//在基类中定义成员函数show()
	private:
		int age;		//年龄
};
void Person::show()
{
	cout<<"年龄:"<<age<<endl;
}
class Student:private Person{	//声明私有派生类Student
	public:
		Student(int age1,int credit1);
		void setage_cre(int a1,int c1)
		{
			setage(a1);	//基类的setage()函数在派生类中为私有成员,派生类成员函数可以访问
			credit=c1;	//正确,成员函数setage_cre()可以访问本类的私有成员credit
		}
		void show();	//在派生类中,重新定义了成员函数show()
	private:
		int credit;		//学分
};
Student::Student(int age1,int credit1):Person(age1)	//定义派生类构造函数时,缀上基类的构造函数
{
	credit=credit1;
}
void Student::show()
{
	Person::show();		//调用基类的show()函数显示年龄
	cout<<"学分:"<<credit<<endl;
}
int main()
{
	Student stu1(19,166);
	stu1.setage_cre(20,168);	//正确,setage_cre在类Student为公有成员,派生类对象能访问。
	stu1.show();				//调用的是派生类中的成员函数公有成员show(),派生类对象能访问。
	//stu1.Person::show();		//加上这条语句错误!因为是私有继承,基类所有成员在派生类中为私有,
								//不可通过派生类的对象直接访问.
	return 0;
}

【例5.3】基类中的保护成员以私有的方式被继承后的访问属性 

//【例5.3】基类中的保护成员以私有的方式被继承后的访问属性
#include <iostream>
#include <string>
using namespace std;
class Person{	//声明基类
	public:
		Person(int age1)
		{	age=age1;	}
		void setage(int age1)
		{	age=age1;	}
		void show();	//在基类中定义成员函数show()
	protected:
		int age;		//年龄
};
void Person::show()
{
	cout<<"年龄:"<<age<<endl;
}
class Student:private Person{	//声明私有派生类Student
	public:
		Student(int age1,int credit1);
		void setage_cre(int a1,int c1)
		{
			setage(a1);	//基类的setage()函数在派生类中为私有成员,派生类成员函数可以访问
			//可以改写成:age=a1;	因为age在person中为protected,私有继承过来可以被访问
			credit=c1;	//正确,成员函数setage_cre()可以访问本类的私有成员credit
		}
		void show();	//在派生类中,重新定义了成员函数show()
	protected:
		int credit;		//学分
};
Student::Student(int age1,int credit1):Person(age1)	//定义派生类构造函数时,缀上基类的构造函数
{
	credit=credit1;
}
void Student::show()
{
	cout<<"年龄:"<<age<<endl;	//可以访问基类的protected成员
	cout<<"学分:"<<credit<<endl;
}
class PostGraduate:private Student{	//声明私有派生类PostGraduate
	public:
		PostGraduate(int age1,int credit1,float subsidy1):Student(age1,credit1)
										//定义派生类构造函数时,缀上基类的构造函数
		{
			subsidy=subsidy1;
		}
		void setall(int age1,int credit1,float subsidy1)
		{
			setage_cre(age1,credit1);
			subsidy=subsidy1;
		}
		void show()
		{
			Student::show();	//可以访问
			//cout<<"年龄:"<<age<<endl;		//不可访问,age在person类中是protected,被Student派生后成为private
			cout<<"学分:"<<credit<<endl;	//可访问,credit在Student中为protected
			cout<<"补助:"<<subsidy<<endl;	//可以访问本类私有成员
		}
		private:
			float subsidy;	//补助
};
int main()
{
	PostGraduate PG1(24,29,3000.00);
	PG1.show();
	PG1.setall(24,29,3500.00);
	PG1.show();
	return 0;
}

 

 【例 5.4】基类和派生类的构造函数及析构函数的调用顺序

//【例 5.4】基类和派生类的构造函数及析构函数的调用顺序
#include <iostream>
using namespace std;
class B {//声明基类B
	public:
		B(){
			cout<<"B类构造函数使用中"<<endl;
		}
		~B(){
			cout<<"析构函数B类对象"<<endl;
		}
};
class D:public B{//基类B的公有派生类D
	public:
		D(){//派生类的构造函数
			cout<<"D类对象构造中"<<endl;
		}
		~D(){
			cout<<"析构D类对象"<<endl;
		}
};
int main()
{
	D op;
	return 0;
}

 

知识点:
1.构造函数的调用顺序
先调用基类的构造函数,后调用派生类的构造函数
2.析构函数的调用顺序(与构造函数的调用顺序正好相反)
先调用派生类的析构函数,后调用基类的析构函数

【例5.5】当基类含有带参构造函数时,派生类构造函数和析构函数的构造方法

//【例5.5】当基类含有带参构造函数时,派生类构造函数和析构函数的构造方法
#include <iostream>
using namespace std;
class B{	//声明基类B
	public:
		B(int n)	//基类构造函数
		{
			cout<<"B类对象构造中"<<endl;
			i=n;
		}
		~B()		//基类析构函数
		{
			cout<<"析构B类对象"<<endl;
		}
		void dispi()
		{
			cout<<i<<endl;
		}
	private:
		int i;
};
class D:public B{	//声明基类B的公有派生类
	public:
		D(int n,int m):B(m)	//定义派生类构造函数时
		{					//缀上要调用的基类构造函数及其参数
			cout<<"D类对象构造中"<<endl;
			j=n;
		}
		~D()				//派生类的析构函数
		{
			cout<<"析构D类对象"<<endl;
		}
		void dispj()
		{
			cout<<j<<endl;
		}
	private:
		int j;	
};
int main()
{
	D obj(50,60);
	obj.dispi();
	obj.dispj();
	return 0;
}

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/288947.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全院级医学影像PACS源码,影像采集传输与存储管理、影像诊断查询与报告管理

全院医学影像PACS源码&#xff0c;数字化影像信息系统源码&#xff0c;带三维影像后处理技术 全院影像设备联网与影像信息数字化存储&#xff0c;建立涵盖全院的PACS/RIS系统&#xff0c;实现从预约、登记、分诊、排队叫号、检查、诊断阅片、报告发布、自助胶片打印等流程化管…

基于深度学习的交通标志图像分类识别系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细探讨了一基于深度学习的交通标志图像识别系统。采用TensorFlow和Keras框架&#xff0c;利用卷积神经网络&#xff08;CNN&#xff09;进行模型训练和预测&#xff0c;并引入VGG16迁移学习…

【obj To 3DTiles 格式转换】 可以自定义经纬高、属性表等参数。

目录 0 引言1 3DTiles数据2 objTo3DTiles2.1 工具的安装2.1.1 拓展&#xff1a;Node.js 和 npm 2.2 工具的使用2.2.1 输出成瓦片数据2.2.2 输出带有坐标参数的瓦片数据 3 查看3DTiles数据 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;Cesiumfor…

探索 Vue 实例方法的魅力:提升 Vue 开发技能(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

苹果小绿灯电路。

苹果充电器上的小绿灯。是5脚供电。一开始的时候&#xff0c;5脚电压是没有的。所以&#xff0c;比较器的3端电压没有&#xff0c;而1端电压呢&#xff1f;受到ACIN DETECTION电路控制&#xff0c;如图所示。当检测到适配器供电的时候&#xff0c;发出高电平SMC_BC_ACOK&#x…

yolo v7支持的设备

将一个深度学习模型&#xff08;在这里是YOLOv7&#xff0c;一个目标检测模型&#xff09;从PyTorch导出到不同的格式&#xff0c;以便在不同平台上进行推理&#xff08;inference&#xff09;。列出的方法包括&#xff1a; PyTorch 转 CoreML&#xff08;适用于 macOS/iOS&am…

Unity中Shader的Reversed-Z(DirectX平台)

文章目录 前言一、在对裁剪坐标归一化设置NDC时&#xff0c;DirectX平台Z的特殊二、在图形计算器中&#xff0c;看一下Z值反转前后变化1、在图形计算器创建两个变量 n 和 f 分别 控制近裁剪面 和 远裁剪面2、带入公式得到齐次裁剪空间下Z值3、进行透视除法4、用 1 - Z 得出Z值反…

docker小白第十一天

docker小白第十一天 dockerfile分析 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。即构建新镜像时会用到。 构建三步骤&#xff1a;编写dockerfile文件-docker build命令构建镜像-docker run镜像 运行容器实例。即一…

TB-C/C++

1.main函数之前之后执行的代码 设置栈指针初始化静态变量和全局变量&#xff08;.data段内容&#xff0c;已初始化且不为0&#xff09;赋初值&#xff08;.bss段内容&#xff0c;未初始化的全局变量和静态变量&#xff09;传参&#xff08;argc,argv&#xff09;atexit() 在…

C++-类和对象(2)

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下 6 个默认成员 函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译…

13个干货议题!拓数派携众多大咖共话国产数据库未来趋势

1月6日下午&#xff0c;由拓数派、PolarDB 开源社区、PostgreSQL 中文社区共同主办的《国产数据库共话未来趋势》技术沙龙将在上海举行。 本次沙龙现场大咖云集&#xff0c;来自拓数派、阿里云、平安科技等公司的众多行业技术大咖将与大家面对面交流&#xff0c;与广大技术爱好…

MySQL中的六种日志你都懂么?不懂!那就必须看看

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

【Linux】深度解剖环境变量

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟悉并掌握Linux的环境变量。 > 毒鸡汤&#x…

基于SSM的滁艺咖啡在线销售系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

基于果蝇算法优化的Elman神经网络数据预测 - 附代码

基于果蝇算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于果蝇算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于果蝇优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针…

CSS 中间位置翻转动画

<template><div class"container" mouseenter"startAnimation" mouseleave"stopAnimation"><!-- 旋方块 --><div class"box" :class"{ rotate-hor-center: isAnimating }"><!-- 元素内容 -->…

Unity之ShaderGraph如何实现瓶装水效果

前言 有一个场景在做效果时,有一个水瓶放到桌子上的设定,但是模型只做了个水瓶,里面是空的,所以我就想办法,如何做出来瓶中液体的效果,最好是能跟随瓶子有液体流动的效果。 如下图所示: 水面实现 水面效果 液体颜色设置 因为液体有边缘颜色和内里面颜色,所以要分开…

【vue】Easy Player实现视频播放:

文章目录 一、效果&#xff1a;二、文档&#xff1a;三、实现&#xff1a;【1】安装插件&#xff1a;【2】引入js文件&#xff1a;【3】使用&#xff1a; 四、方法&#xff1a; 一、效果&#xff1a; 二、文档&#xff1a; GitCode - EasyPlayer.js npm-easydarwin/easyplayer…

FairGuard游戏加固产品常见问题解答

针对日常对接中&#xff0c;各位用户对FairGuard游戏加固方案在安全性、稳定性、易用性、接入流程等方面的关注&#xff0c;我们梳理了相关问题与解答&#xff0c;希望可以让您对产品有一个初步的认知与认可。 Q1:FairGuard游戏加固产品都有哪些功能? A&#xff1a;FairGuar…

贝叶斯推断:细谈贝叶斯变分和贝叶斯网络

1. 贝叶斯推断 统计推断这件事大家并不陌生&#xff0c;如果有一些采样数据&#xff0c;我们就可以去建立模型&#xff0c;建立模型之后&#xff0c;我们通过对这个模型的分析会得到一些结论&#xff0c;不管我们得到的结论是什么样的结论&#xff0c;我们都可以称之为是某种推…