c++(五)

c++(五)

  • 继承
    • 基类和派生类
    • 继承的格式
    • 继承的方式
      • 三种:public、private、protected
    • 继承的规则
      • 多层继承
      • 多重继承
  • 类与类的关系

继承

  • 一个新类从已有的类那里获得其已有特性(属性、行为),这种现象称为类的继承

基类和派生类

<1>从已有的类(父类/基类)产生一个新的子类,称为类的派生。
<2>派生类是基类的具体化,而基类则是派生类的抽象。

  • 当新的类是已经存在的类的一种特殊版本的时候,可以使用继承
  • 子类要继承父类的所有特性(属性和行为),但是构造函数、析构函数是不能被继承的,友元也不能被继承,因为它不是类的成员

继承的格式

class 类名: 访问限定符 基类名
{
;
}

继承的方式

三种:public、private、protected

三种:public、private、protected

<1>以public的方式继承
在这里插入图片描述
<2>以private方式继承
在这里插入图片描述
<3>以protected方式继承
在这里插入图片描述

总结:
<1>不管使用哪种方式继承,父类的private成员在子类内部外部都不可访问
<2>不管使用哪种方式继承,父类的protected成员在子类内部可以访问,子类外部不可访问
<3>只有采用public方式继承的时候,父类中是什么样子的访问限定符在子类中也是什么样的访问限定符
<4>在继承时,父类中的成员变量一般建议放在protected中
<5>继承的方式建议用public的方式去继承

子类构造函数的执行
在继承关系中,创建子类对象时,先执行父类的构造函数,再执行子类的构造函数
子类析构函数的执行
在继承关系中,当子类的生命周期结束的时候,先执行子类的析构函数,再执行父类的析构函数

继承的规则

<1>子类的构造函数只会对子类的对象进行空间的分配和初始化,父类中继承来的属性只能由父类的构造函数
进行初始化
<2>在子类创建对象的时候,若没有指定父类要执行的构造函数,父类就会执行它的默认构造函数

在这里插入图片描述

多层继承

A–>B–>C

如果不指定父类的构造函数,默认执行的是父类的默认构造函数

#include <iostream>
using namespace std;
/*
* 多重继承
*/
class People
{
public:
	People()
	{
		cout << "父类默认构造" << endl;
	}
	People(string name , int age = 18):name(name),age(age)
	{
		cout << "父类构造" << endl;
	}
	~People()
	{
		cout << "父类析构" << endl;
	}
	void show()
	{
		cout << "姓名:" << this->name << ","
			<< "年龄:" << this->age << endl;
	}
private:
protected:
	string name;
	int age;
};
class Stu : public People
{
public:
	Stu(int sno = 1, string name = "李四", int age = 18) :sno(sno)
	{
		cout << "子类构造函数" << endl;
	}
	~Stu()
	{
		cout << "子类析构" << endl;
	}
	//重定义
	void show()
	{
		cout << "学号:" << this->sno << ",姓名:" << this->name << ",年龄:" << this->age << endl;
	}
private:
protected:
	int sno;
};

int main()
{
	Stu stu1;
	stu1.show();
	return 0;
}

在这里插入图片描述
指定执行父类的构造函数

#include <iostream>
using namespace std;
/*
* 多重继承
*/
class People
{
public:
	People()
	{
		cout << "父类默认构造" << endl;
	}
	People(string name , int age = 18):name(name),age(age)
	{
		cout << "父类构造" << endl;
	}
	~People()
	{
		cout << "父类析构" << endl;
	}
	void show()
	{
		cout << "姓名:" << this->name << ","
			<< "年龄:" << this->age << endl;
	}
private:
protected:
	string name;
	int age;
};
class Stu : public People
{
public:
	Stu(int sno = 1, string name = "李四", int age = 18) :People(name, age),sno(sno)
	{
		cout << "子类构造函数" << endl;
	}
	~Stu()
	{
		cout << "子类析构" << endl;
	}
	//重定义
	void show()
	{
		cout << "学号:" << this->sno << ",姓名:" << this->name << ",年龄:" << this->age << endl;
	}
private:
protected:
	int sno;
};

int main()
{
	Stu stu1;
	stu1.show();

	Stu stu2(2, "王五", 22);
	stu2.People::show();
	stu2.show();

	return 0;
}

在这里插入图片描述

多重继承

在这里插入图片描述
**注意:**在多重继承关系中,先执行谁的构造函数与初始化的顺序无关,是由继承的先后顺序决定的
在这里插入图片描述
出现的问题:
在这里插入图片描述
解决:
<1>加上作用域(不合适)
在这里插入图片描述
<2>虚继承
在这里插入图片描述

#include <iostream>
using namespace std;
/*
* 多重继承
*/
class People
{
public:
	People()
	{
		cout << "people 默认构造" << endl;
	}
	People(string name, int age = 20) :name(name), age(age)
	{
		cout << "people类构造" << endl;
	}
	~People()
	{
		cout << "people 析构" << endl;
	}
	void show()
	{
		cout << "姓名:" << this->name << ",年龄:" << this->age << endl;
	}
private:
protected:
	string name;
	int age;
};
class Worker :virtual public People
{
public:
	Worker(string name, int age, int salary = 30000) :People(name, age), salary(salary)
	{
		cout << "worker构造" << endl;
	}
	~Worker()
	{
		cout << "worker析构" << endl;
	}
	void show()
	{
		cout << "姓名:" << this->name << ",年龄:" << this->age << ",薪资:" << this->salary << endl;
	}
private:
protected:
	int salary;
};
class Farmer : virtual public People
{
public:
	Farmer(string name, int age, int filecout = 200) :People(name, age), filecout(filecout)
	{
		cout << "farmer构造" << endl;
	}
	~Farmer()
	{
		cout << "farmer析构" << endl;
	}
	void show()
	{
		cout << "姓名:" << this->name << ",年龄:" << this->age << ",几亩田:" << this->filecout << endl;
	}
private:
protected:
	int filecout;
};
class workFarmer : public Worker, public Farmer
{
public:
	workFarmer(string name = "溜溜", int age = 22, int salary = 29830, int filecout = 200,int car = 3) :
		Worker(name, age, salary), Farmer(name, age, filecout),People(name,age),car(car)
	{
		cout << "workFarmer构造" << endl;
	}
	~workFarmer()
	{
		cout << "workFarmer析构" << endl;
	}
	void show()
	{
		cout << "姓名:" << this->name << ",年龄:" << this->age << ",几亩田:" << this->filecout 
			<<",薪资:" << this->salary << ",车辆:" << this->car << endl;
	}
private:
protected:
	int car;
};

int main()
{
	workFarmer wf1;
	wf1.show();
	wf1.Farmer::show();
	wf1.Worker::show();
	return 0;
}

在这里插入图片描述

类与类的关系

继承关系 is a的关系
编辑框类、按钮类、标签类 都称为组件类
编辑框、按钮、标签都是组件中的一种。
包含关系 has a的关系
登录类、注册类、
登录类中包含了编辑框类、按钮类、标签类的对象 ,这些标签、编辑框、按钮都是构成这些界面的组件!

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

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

相关文章

外卖小程序开发指南:从源码开始构建高效的外卖平台

今天&#xff0c;笔者将为您详细讲解如何从源码开始构建一个高效的外卖小程序&#xff0c;帮助您快速进入这一蓬勃发展的市场。 一、需求分析与设计 需求分析包括&#xff1a; 1.用户需求 2.市场需求 3.技术需求 二、前端开发 以下是开发步骤&#xff1a; -使用微信开发…

创新指南|降低 TikTok CPA 的 9 项专家策略

企业在 TikTok 上投放广告&#xff0c;往往最想确保获得最佳的投资回报。然而&#xff0c;这往往说起来容易做起来难。您需要了解如何利用不同的营销工具、定位策略和创意执行来实现您的业务目标并提高成本效率。本文将分享 9 个行之有效的策略&#xff0c;助您有效降低 TikTok…

Java面试八股之对threadLocal是怎么理解的

对threadLocal是怎么理解的 概念与特点&#xff1a;ThreadLocal是Java提供的一个类&#xff0c;它允许你创建线程局部变量。每个线程都拥有自己的ThreadLocal变量副本&#xff0c;彼此之间互不影响&#xff0c;实现了变量在线程间的隔离。这意味着&#xff0c;即使多个线程使用…

力扣算法之1068. 产品销售分析 I

力扣传送门 题解 同时输出a,b两张表上的数据 我的解 SELECT product_name,year,price FROM Sales a LEFT JOIN Product b ON a.product_id b.product_id我的解注解 考sql联表语法

go语言,golang,linux,unbantu安装

查看系统是arm还是amd uname -m 命令可以显示系统的架构类型&#xff1a; uname -m输出可能是&#xff1a; x86_64&#xff1a;表示是 AMD64 架构&#xff08;即 64 位的 x86 架构&#xff09;。aarch64&#xff1a;表示是 ARM64 架构&#xff08;即 64 位的 ARM架构&#xf…

node.js —— 解读http模块

目录 http模块&#xff1a; http模块的引入&#xff1a; 创建web服务器的基本步骤&#xff1a; web服务器的一些基本属性&#xff1a; 上述知识汇总案例&#xff1a; http模块&#xff1a; http模块的引入&#xff1a; const http require (http) 创建web服务器的基本步骤…

MySQL中Undo-log是什么?有什么作用?

2.6.1. Undo-log撤销日志 Undo即撤销的意思&#xff0c;通常也称为回滚日志&#xff0c;用来给MySQL撤销SQL操作的。 当一条写入类型的SQL执行时&#xff0c;都会记录Undo-log日志&#xff0c;Undo-log并不存在单独的日志文件&#xff0c;InnoDB默认是将Undo-log存储在xx.ibd…

笔记-Apriori算法介绍(Python实现)

1.Apriori算法简介 Apriori算法是经典的挖掘频繁项集和关联规则的数据挖掘算法。A priori在拉丁语中指"来自以前"。当定义问题时&#xff0c;通常会使用先验知识或者假设&#xff0c;这被称作"一个先验"&#xff08;a priori&#xff09;。Apriori算法的名…

vue2-computed,vue3+watch 前端实现列表搜索,结合filter+some+indexOf

vue2 computed实现 computed: {FBAAddressListComputed () {if (!this.fbaInput) return this.FBAAddressListconst lowerCaseInput this.fbaInput.toLowerCase()return this.FBAAddressList.filter((item) > {return [item.fbaCode, item.zipCode, item.countryCode, ite…

马斯克拟打造xAI“算力超级工厂”,助力聊天机器人Grok

KlipC报道&#xff1a;马斯克计划推出xAI超级计算机&#xff0c;为下一代人工智能聊天机器人Grok提供动力&#xff0c;直言这将是一个“算力超级工厂”&#xff0c;并希望在2025年秋季之前能运行起来。 xAI是马斯克去年创立的人工智能初创公司&#xff0c;“尽可能寻求真相”、…

Vue3项目练习详细步骤(第二部分:主页面搭建)

主页面搭建 页面主体结构 路由 子路由 主页面搭建 页面主体结构 在vuews目录下新建Layout.vue文件 主页面内容主体代码 <script setup> import {Management,Promotion,UserFilled,User,Crop,EditPen,SwitchButton,CaretBottom } from element-plus/icons-vue imp…

Selenium探险家:驾驭Web自动化的秘籍与实战

Hi&#xff0c;我是阿佑&#xff0c;今天将带大伙们学会如何使用Selenium进行高效的网站测试&#xff0c;如何配置Selenium Grid实现分布式测试&#xff0c;以及如何预测和拥抱自动化测试的未来&#xff01; 文章目录 1. 引言2. 背景介绍2.1 Selenium概览2.2 Python与Selenium的…

SwiftUI中EnvironmentObject的使用(多界面共享数据)

SwiftUI的EnvironmentObject是一个强大的工具&#xff0c;它允许你在多个视图之间共享数据(使用一个可观察对象)。当你有一个复杂的视图层次结构&#xff0c;并且需要在没有直接连接的视图之间共享相同的可观察对象时&#xff0c;它特别有用。 我们之前传递数据主要是通过init…

奥枫软件Java要个16K遇到地狱级难度,醉了。。。

我只能说地狱难度&#xff0c;没绝对把握就别去了。我凭借前辈的经验&#xff0c;和当时天时地利人和&#xff0c;六道题答得很不错&#xff0c;但还是没通过。我有备而来都没过&#xff0c;现场写那些应该都是白忙活了。 一面 1&#xff0c;分割一个整数。如123&#xff0c;结…

视图【mysql数据库】

目录 一、视图的创建、查看、修改、删除 二、cascaded、local检查选项 cascaded和local的区别 三、视图的更新 四、视图的作用 一、视图的创建、查看、修改、删除 二、cascaded、local检查选项 上面的几句SQL中&#xff0c;我们虽然给视图插入了id 30的数据&#xff0c;但…

基于 vuestic-ui 实战教程 - 登录篇

1. 简介 登录做为一个系统的门面&#xff0c;也是阻挡外界的一道防线&#xff0c;那在vuestic-ui中如何做登录功能呢。在这里就之间沿用初始版本的Login页面&#xff0c;作为一个演示模板&#xff0c;后续需要改进的读者可以在此篇文章的基础上修改。 2. 登录接口相关api 与 t…

扔掉 MacBook,挑战带OrangePi出差!

背景 由于工作需要&#xff0c;博主经常会到各大企业的自建机房中私有化部署公司的软件产品。 在某些企业自建机房中&#xff0c;有时给到全新的机器&#xff0c;没有基础环境&#xff0c;甚至有的还无法互联网&#xff0c;而且因为近几年CentOS的停止更新&#xff0c;服务器…

go-zero 实战(2)

go-zero 实战&#xff08;1&#xff09; 中&#xff0c;使用了go-zero 创建了order 和 user 两个微服务。而order作为grpc的客户端&#xff0c;user 作为grpc的服务端&#xff0c;打通了 order 到 user的调用。接下来&#xff0c;我们在user中&#xff0c;加入mysql组件。确保数…

开源与闭源:AI模型发展的两条路径

目录 前言1 数据隐私保护与用户数据安全1.1 开源大模型的透明性与挑战1.2 闭源大模型的控制与责任 2 商业应用的优劣比较2.1 开源大模型的灵活性与创新2.2 闭源大模型的可靠性与服务质量 3 社区参与与合作的差异3.1 开源大模型的社区驱动与协作3.2 闭源大模型的企业主导与保密性…

四川古力未来科技抖音小店安全靠谱,购物新体验

在数字化浪潮席卷而来的今天&#xff0c;电商行业蓬勃发展&#xff0c;各种线上购物平台如雨后春笋般涌现。其中&#xff0c;抖音小店凭借其独特的短视频直播购物模式&#xff0c;迅速赢得了广大消费者的青睐。而四川古力未来科技抖音小店&#xff0c;更是以其安全靠谱、品质保…