【C++】学习笔记——继承_1

文章目录

  • 十一、模板进阶
    • 5. 模板的优缺点
  • 十二、继承
    • 1. 继承的概念及定义
    • 2. 基类和派生类对象赋值转换
    • 3. 继承中的作用域
    • 4. 派生类的默认成员函数
  • 未完待续


十一、模板进阶

5. 模板的优缺点

优点:

  1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生。
  2. 增强了代码的灵活性。

缺点:

  1. 模板会导致代码膨胀问题,也会导致编译时间变长。
  2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。

其实总的来说,模板的利还是大于弊的,该用模板的时候还是要用模板。

十二、继承

1. 继承的概念及定义

继承 机制是面向对象程序设计 使代码可以复用 的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类(或叫做子类),被拓展的类叫基类(或叫做父类)。
比如说:我们想设计一个学生管理系统,涉及到的对象有学生和老师,分别封装成两个类,但是老师和学生都含有姓名、年龄、性别等等的信息,要是将这些变量都分别放到各个类里,就会有些冗余。而继承机制就是,设计一个类,这个类里有共有的成员变量或成员函数,派生出的子类继承这个父类,就能拥有父类的这些成员变量和成员函数,减少了冗余。
在这里插入图片描述

#include<iostream>
using namespace std;// 父类,代表人
class Person
{
public:void Print(){cout << "name:" << _name << endl;cout << "age:" << _age << endl;}
protected:// 姓名string _name = "peter";// 年龄int _age = 18;
};// 子类,代表学生,继承自 Person
class Student : public Person
{
protected:// 学号int _stuid;
};// 子类,代表教师,继承自 Person
class Teacher : public Person
{
protected:// 工号int _jobid;
};int main()
{Student s;Teacher t;s.Print();t.Print();return 0;
}

在这里插入图片描述

我们发现,学生类和教师类里既没有 Print() 函数,也没有 name,age 成员变量,但就是能够使用。这就是继承,从父类获得成员变量和成员函数

我们知道,类访问限定符有三种,public(共有)、protected(保护)、private(私有) 。同样的,继承方式也有三种:public(共有)、protected(保护)、private(私有) 。那么,这两者有什么关系?从父类继承过来的成员在子类中又是什么访问权限?
在这里插入图片描述
什么是共有?共有就是,类本身可以访问,类派生后的子类可以访问,类外也可以访问。什么是保护?保护就是,类本身可以访问,类派生后的子类可以访问,类外不能访问。什么是私有?私有就是,类本身可以访问,类派生后的子类不可以访问,类外不可以访问。

权限大小:public > protected > private

实际上面的表格我们进行一下总结会发现,父类的私有成员在子类都是不可见这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它父类。的其他成员在子类的访问方式是 成员在父类的访问限定符和继承方式的两者权限较小的

继承方式可以不写,使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,不过最好还是显示的写出继承方式。

2. 基类和派生类对象赋值转换

由于子类是父类的拓展,所以,父类有的,子类都有,子类有的,父类不一定有。当子类赋值给父类时:子类将会把与父类相同的部分进行切割,然后赋值给父类
在这里插入图片描述
然而,父类并不能赋值给子类 。但是 父类的指针可以通过 强制类型转换 来赋值给子类

3. 继承中的作用域

在继承体系中父类和子类都有 独立的作用域 。父类和子类的作用域互不相干,因此,父类和子类允许出现同名变量或者同名函数。

#include<iostream>
using namespace std;// 父类,代表人
class Person
{
public:void Print(){cout << "name:" << _name << endl;cout << "age:" << _age << endl;}
protected:// 姓名string _name = "peter";// 年龄int _age = 18;// 父类增加一个 _numint _num = 0;
};// 子类,代表学生,继承自 Person
class Student : public Person
{
public:void func(){cout << _num << endl;}
protected:// 学号int _stuid;// 子类增加一个 _numint _num = 1;
};// 子类,代表教师,继承自 Person
class Teacher : public Person
{
protected:// 工号int _jobid;
};int main()
{Student s;s.func();return 0;
}

在这里插入图片描述
我们发现,此时子类访问的 _num 是子类本身的成员,因此我们可以知道,当父类和子类中出现同名成员时,会访问到子类成员 。这种情况叫做 隐藏 ,也叫做 重定义 。当然,可以通过作用域限定符来指定访问父类。需要注意的是,只要父类和子类的成员函数函数名相同,参数不同,依然构成 隐藏 ,只要同名就构成 隐藏 ,因为不在同一个域,所以不存在重载情况

4. 派生类的默认成员函数

类有6个默认成员函数,默认 的意思就是指我们不写,编译器会变我们自动生成一个,那么在派生类中,这几个成员函数是如何生成的呢?
在这里插入图片描述

  1. 对于子类的构造函数,我们需要将父类看作一个整体,看作一个独立的类。子类等价于父类 + 子类独有的成员 。而 父类就相当于自定义类型 ,所以子类的构造函数是需要调用父类的默认构造函数的,如果父类没有默认的构造函数,则子类需要在初始化列表显示定义父类的构造函数。
Person(const char* name = "peter"): _name(name)
{//
}Student(const char* name, int num): Person(name)  // 匿名对象,显示调用父类的构造函数, _num(num)
{//
}
  1. 拷贝构造函数与构造函数一样。内置类型进行值拷贝,自定义类型调用它的拷贝构造函数。
Person(const Person& p): _name(p._name)
{//
}Student(const Student& s): Person(s)   // 切片,子类可以赋值给父类, _num(s ._num)
{//
}
  1. 赋值重载同理,不过需要注意同名函数产生的隐藏。
Person& operator=(const Person& p)
{if (this != &p)_name = p ._name;return *this ;
}Student& operator = (const Student& s )
{if (this != &s){// 限定作用域,避免发生隐藏Person::operator =(s);_num = s ._num;}return *this ;
}
  1. 对于析构函数,构造函数要满足先构造父类后构造子类,析构函数需要满足先析构子类后析构父类,子类的析构函数会在被调用完成后 自动调用父类的析构函数 清理父类成员。
~Person()
{//
}~Student()
{//
} //子类析构完成后会自动调用父类的析构函数

未完待续

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某银行软件测试笔试题,满分一百你能得多少分?

时间90分钟&#xff0c;满分100分&#xff09; 考试要求&#xff1a;计算机相关专业试题 一、填空题&#xff08;每空1分&#xff0c;共10分&#xff09; 1. ______验证___是保证软件正确实现特定功能的一系列活动和过程。 2. 按开发阶段分&#xff0c;软件测试可分为&#x…

SSIM(Structural Similarity),结构相似性及MATLAB实现

参考文献 Wang, Zhou; Bovik, A.C.; Sheikh, H.R.; Simoncelli, E.P. (2004-04-01). “Image quality assessment: from error visibility to structural similarity”. IEEE Transactions on Image Processing. 13 (4): 600–612. Bibcode:2004ITIP…13…600W. CiteSeerX 10.…

YOLO数据集制作(二)|json文件转txt验证

以下教程用于验证转成YOLO使用的txt格式&#xff0c;适用场景&#xff1a;矩形框&#xff0c;配合json格式文件转成YOLO使用的txt格式脚本使用。 https://blog.csdn.net/StopAndGoyyy/article/details/138681454 使用方式&#xff1a;将img_path和label_path分别填入对应的图…

Android Studio开发之路(九)创建android library以及生成aar文件

一、需求 我做了一个camerax相机opencv图像处理图片上传服务器功能的android应用&#xff0c;应客户需求要将其改成一个SDK&#xff0c;由客户加到他们自己的app里边。 于是&#xff0c;我需要制作一个library&#xff0c;打包成aar文件&#xff08;jar:只有代码&#xff0c;没…

YOLOv5改进 | 注意力机制 | 用于移动端的高效坐标CA注意力机制

在深度学习目标检测领域&#xff0c;YOLOv5成为了备受关注的模型之一。本文给大家带来的是能用于移动端的高效坐标CA注意力机制。文章在介绍主要的原理后&#xff0c;将手把手教学如何进行模块的代码添加和修改&#xff0c;并将修改后的完整代码放在文章的最后&#xff0c;方便…

打破地域界限,HubSpot海外获客系统引领企业走向国际化

在全球化的浪潮中&#xff0c;企业如何精准把握海外市场、高效获取并转化目标客户&#xff0c;已成为决定其市场地位与未来发展的关键因素。HubSpot海外获客系统以其独特的视角、强大的功能和卓越的性能&#xff0c;正在引领全球营销进入一个新的时代。今天运营坛将深入剖析Hub…

交易复盘-20240513

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 双成药业 (1)|[9:30]|[3566万]|0.34 中通客车 (1)|[9:43]|[7678万]|0.15 嘉华股份 (2)|[9:30]|[36…

基于Springboot的大学生平时成绩量化管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的大学生平时成绩量化管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三…

Spring Boot日志

目录 一、日志概述 1、为什么要学习日志&#xff1f; 2、日志的用途 &#xff08;1&#xff09;系统监控 &#xff08;2&#xff09;数据采集 &#xff08;3&#xff09;日志审计 二、日志使用 1、打印日志 &#xff08;1&#xff09;在程序中得到日志对象 &#xf…

WebView基础知识以及Androidx-WebKit的使用

文章目录 摘要WebView基础一、启动调整模式二、WebChromeClient三、WebViewClient四、WebSettings五、WebView和Native交互 Androidx-WebKit一、启动安全浏览服务二、设置代理三、安全的 WebView 和 Native 通信支持四、文件传递五、深色主题的支持六、JavaScript and WebAssem…

自主实现Telnet流量抓取

自主实现Telnet流量抓取 根据测试需求&#xff0c;需要抓取Telnet流量包&#xff0c;使用wireshark Python&#xff08;socket、telnetlib库&#xff09;实现 实现代码 主要此处有坑&#xff0c; 根据协议规则&#xff0c;wireshark 默认端口为23 的是Telnet协议&#xff0…

3D模型实时变形算法

最近&#xff0c;在尝试渲染一些奇怪的形状后&#xff0c;我陷入了计算机图形学的困境。事实证明&#xff0c;对于我试图解决的具体问题&#xff0c;没有现有的选项完全适合我想要做的事情。几周后&#xff0c;我终于带着一些答案再次浮出水面&#xff0c;写了很多行代码&#…

DS:顺序表、单链表的相关OJ题训练(2)

欢迎各位来到 Harper.Lee 的学习世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦&#xff01; 一、力扣--141. 环形链表 题目描述&#xff1a;给你一个链表的头节点 head &#xff0c;判断链表中是否有环。如果链表中有某个…

HTML学习|网页基本信息、网页基本标签、图像标签、超链接标签、列表标签、表格标签、媒体元素、页面结构分析、iframe内联框架

网页基本信息 DOCTYPE是设置使用什么规范&#xff0c;网页整个信息都在html标签中&#xff0c;head标签里包含字符集设置&#xff0c;网页介绍等信息&#xff0c;title标签是网页的名称&#xff0c;网页的主干都在body标签中 网页基本标签 标题标签 h1~h6都是标题标签&#x…

2024数维杯数学建模A题B题C题思路+模型+代码(开赛后第一时间更新)

2024数维杯数学建模A题B题C题思路模型代码&#xff08;开赛后第一时间更新&#xff09; https://mbd.pub/o/bread/ZpWakpdq https://mbd.pub/o/bread/ZpWakpdq 2024年第九届数维杯大学生数学建模挑战赛参赛规则 竞赛要求及论文提交方式; ①本次参赛作品统一在线提交到竞赛…

软件需求工程复习——知识点

一&#xff0c;单选题&#xff08;20分&#xff09; 二&#xff0c;判断题&#xff08;10分&#xff09; 三&#xff0c;简答题&#xff08;20分&#xff09; 四&#xff0c;分析与设计题&#xff08;50分&#xff09; 一、导论 1、应用型软件的模拟特性 应用型软件在“模拟”…

基于无监督学习算法的滑坡易发性评价的实施(k聚类、谱聚类、Hier聚类)

基于无监督学习算法的滑坡易发性评价的实施 1. k均值聚类2. 谱聚类3. Hier聚类4. 基于上述聚类方法的易发性实施本研究中的数据集和代码可从以下链接下载: 数据集实施代码1. k均值聚类 K-Means 聚类是一种矢量量化方法,最初来自信号处理,旨在将 N 个观测值划分为 K 个聚类,…

Web 安全漏洞之文件上传

目录 文件上传漏洞及危害 文件名 HTML 和 SVG 软链 服务器磁盘 防御方法 网络安全学习路线 &#xff08;2024最新整理&#xff09; 学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明&#xff1a; 文件上传漏洞及危害 文件上传漏洞…

基于百川大语言模型的RSS新闻过滤应用【云服务器+公网网页,随时随地看自己DIY订阅的新闻内容】

背景 目前从公众号、新闻媒体上获得的新闻信息,都是经过算法过滤推荐的,很多时候会感到内容的重复性和低质量,因为他们也要考虑到自己的利益,并非完全考虑用户想要的、对用户有价值的信息。这时,如果要获取自己认为重要的信息,定制化开发自己的筛选算法更好。 效果 素材…

计算机网络(第八版 谢希仁 编著) 期末复习大纲

一.每章总结 第一章&#xff1a;分组交换&#xff0c;计网定义、范围划分&#xff0c;性能指标&#xff0c;五层体系结构&#xff0c;TCP/IP体系结构 第二章&#xff1a;物理层&#xff0c;码元&#xff0c;基带调制(数字信号->数字信号&#xff0c;也叫编码)&#xff0c;带…