【C++ 继承与派生/知识梳理】
- 为什么引入继承派生
- 代码重用扩充
- 软件的复用
- 层次分类
- 派生类的语法定义
- class 派生类名(1):继承方式(2) 基类名(3){
派生成员声明;}
*(1)一个派生类——>多个基类,多继承。 只有一个基类,单继承。
(2)继承方式:关键字3个:public, protected,private
public: 公有成员和保护成员访问属性在派生类中不变,同:基类的私有成员不能直接访问。
protected: 公有成员和保护成员访问属性在派生类变成保护成员。同:基类的私有成员不能直接访问。
private: 基类中的公有成员和保护成员都成了派生类的私有成员,同:基类的私有成员不能直接访问。(作用:中止基类继续派生,qustion:1.基类的公共成员还能不能被对象访问?2.私有成员和保护成员有什么区别?//私有成员不能被继承,也不能被外部函数访问,保护可以被继承,但是外部函数不能访问,派生类的对象可以直接访问保护函数,基类对象不能直接访问)
- 访问与标识
(1) 当派生类与基类有同名成员时: 若未明确指出,则通过派生类对象使用的是派生类中的同名成员(同名覆盖原则)若要通过派生类对象访问基类中被覆盖的同名成员,应使用基类名及作用域分辨符限定
(2) 多个基类存在同名成员时,如果通过派生类对象访问存在二义性,也应使用基类名及作用域分辨符限定
- 派生类的构造函数
- 语法:
派生类名::派生类名(所有形参) : 基类名1(基类1形参), … 基类名n(基类n形参), 内嵌对象名1(内嵌对象1形参), … { 派生类新增成员的初始化; }
- 调用顺序
1.首先,调用基类构造函数。 多个基类之间,按照它们被继承时声明的顺序 2.其次,调用内嵌对象的构造函数。多个内嵌对象之间,按照它们在类中声明的顺序. 3 最后,调用派生类的构造函数。
- 语法:
- 解析函数
当派生类对象的生命期结束时: 编译器会自动调用派生类的析构函数和基类的析构函数 析构函数的调用顺序与构造函数相反
- 复制构造函数
- 类型兼容规则
- 类型兼容原则
一个公有派生类的对象在使用上可以被当作基类的对象,反之,不可以。
- 虚基表
① 主要用来解决多重继承时可能发生的对同一基类继承多次而产生的二义性问题 ② 为派生类提供唯一的基类成员,而不重复产生多次拷贝

定义
class Base1:virtual public Base0 { public: int var1; void fun1(); };
- 在第一级继承时就要将共同基类设计为虚基类

【C++ 继承与派生/知识梳理】的更多相关文章
- C/C++基础知识总结——继承与派生
1. 类的继承与派生 1.1 派生类的定义 (1) 定义规范 class 派生类名: 继承方式 基类1名, 继承方式 基类2名... { ...派生类成员声明; }; (2) 从以上形式上看可以多继承 ...
- C/C++编程笔记:C++入门知识丨继承和派生
本篇要学习的内容和知识结构概览 继承和派生的概念 派生 通过特殊化已有的类来建立新类的过程, 叫做”类的派生”, 原有的类叫做”基类”, 新建立的类叫做”派生类”. 从类的成员角度看, 派生类自动地将 ...
- solr DIH 知识梳理
solr DIH 知识梳理 web.xml中listener配置 <listener> <listener-class>org.apache.solr.handler.data ...
- [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型
引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...
- 程序设计实习MOOC / 继承和派生——编程作业 第五周程序填空题1
描述 写一个MyString 类,使得下面程序的输出结果是: 1. abcd-efgh-abcd- 2. abcd- 3. 4. abcd-efgh- 5. efgh- 6. c 7. abcd- 8 ...
- C#基础知识梳理索引
C#基础知识梳理索引 一 引子 之前曾写了一篇随笔<.NET平台技术体系梳理+初学者学习路径推荐+我们的愿景与目标> 三个月过去了,目标使更多的编程初学者,轻松高效地掌握C#开发的基础,重 ...
- Linux基础知识梳理
Linux基础知识梳理 Linux内核最初只是由芬兰人林纳斯?托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的.Linux是一套免费使用和自由传播的类Unix操作系统,是 ...
- 【C++ 实验六 继承与派生】
实验内容 1. 某计算机硬件系统,为了实现特定的功能,在某个子模块设计了 ABC 三款芯片用于 数字计算.各个芯片的计算功能如下: A 芯片:计算两位整数的加法(m+n).计算两位整数的减法(m-n) ...
- C++复习:继承与派生
1继承概念 面向对象程序设计有4个主要特点:抽象.封装.继承和多态性.说了类和对象,了解了面向对象程序设计的两个重要特征一数据抽象与封装,已经能够设计出基于对象的程序,这是面向对象程序设计的基础. 要 ...
随机推荐
- VUE温习:nextTick、$refs、嵌套路由、keep-alive缓存、is特性、路由属性用法、路由钩子函数
一.$nextTick 1.vue的dom执行异步更新,只要观察到数据变化,vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变. 2.vue.$nextTick(cb),数据发生变化,更新 ...
- 毕加索发布轻量化转化引擎及BIMSOP协作云平台
一直以来,杂务缠身,博客都好久没有更新了,以后还是要继续坚持总结一下.希望能有时间坚持下去 :) 月初在国家会议中的智能展会上,我分享了毕加索公司近来的工作,即自行研发的轻量化转化云平台,以及以此为基 ...
- jsp中添加过滤器,实现校验用户身份
我现在需要实现一个功能,就是用户登录前不允许访问系统,我使用的是jsp的过滤器来实现的. 先把filter过滤器的代码粘出来: package com.day8.filter; import java ...
- C#使用HttpWebRequest和HttpWebResponse上传文件示例
C#使用HttpWebRequest和HttpWebResponse上传文件示例 1.HttpHelper类: 复制内容到剪贴板程序代码 using System;using System.Colle ...
- solr+zookeeper集群配置
将solr配置文件交给zookeeper进行管理 ./zkcli.sh -zkhost node01:2181,node02:2181,node03:2181 -cmd upconfig -confd ...
- Effective Java 第三版—— 84. 不要依赖线程调度器
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- PHP-问题处理验证码无法显示出来
1.问题 今天重新安装了ubuntu,PHP,MySQL,Apache,到测试CMS项目时发生一个错误: 验证码无法显示出来. 2.解决: 2.1 使用 phpinfo检查: phpinfo(); 在 ...
- Cordova 项目 加载不出XML文件
解决方法:copy bundle 将文件移除再添加
- Go使用详解
1.什么是Go keep it simple stupid的编程语言 2.安装 以Ubuntu为例 # 下载安装包 wget https://storage.googleapis.com/golang ...
- MongoDB增删改查实例
MongoDB之Java测试代码(DAO层),mongodbdao MongoInit.java是数据库初始化及连接类 MongoUtils.java是对mongodb的各种操作方法 MongoIni ...