C++ 的继承与虚函数 读书笔记
1、类与类之间可能会存在共性。
2、类与类之间必定会有差异。
3、为也节约开发时间和代码量,我们在设计类时可以把类的共享抽象出来形成一个基础类(基类)。
4、使用基类+差异生成一个新的类的叫派生类
1、在设计一个类时如果已有的类中有它需要的成员,它可以从已有的类中继承哪些成员,被继承的类叫父类或基类,继承类叫作派生类或子类。
class 类名 : 继承方式 基类1,继承方式 基类2,...
{
3、在设计类时如何形成继承的关系?
类的设计:
a、根据问题找对象
b、把对象中我们需要的属性和行为抽象出来
c、把抽象出的结果记录在一个class中形成一个类
d、把class类实例化构造对象
e、对象调用成员函数解决问题
继承就是在对对象抽象的结果进行归纳总结,找出它们的共享形成基类,再把基类+差异派生出子类。
子类在继承父类后可以节约大量的代码、节省开发时间、缩短开发周。
a、继承会提高类与类之间的耦合度
b、会降低代码的安全性和可维护性
1、继承虽然可以获取父类中的所有成员,但子类中可以隐藏父类中的同名成员。
2、父子类中的函数不可以形成重载,只有在同一个作用域下的同名不同参、const属性的函数才能开成重载。
3、父类中的成员在子类的访问属性。
父类中的 public 在子类中 可以访问
父类中的 protected 在子类中 可以访问
父类中的 private 在子类中 不可以访问
不同的继承方式会影响父类成员变量成子类成员后它们的访问属性,也就是继承来的成员在类外的访问属性。
public 不变
protected 公有变保护,其它不变
private 全部变成私有的
1、子类中会隐藏父类中的同名函数,这种关系叫作隐藏。
2、在同一作用域下的同名函数,这种关系叫作重载。
3、如果父类中的函数添加 virtual 关键字,这种函数就叫作虚函数,子类中会覆盖父类同名的虚函数。
4、虚函数是实现多态的基础。
1、在继承时先调用父类的构造函数,再调用子类的构造函数
2、在继承中先调用子类的析构,再调用父类的析构。
3、在调用拷贝构造时会先调用父类的拷贝构造,再调用子类的拷贝构造。
4、在C++中继承可以有多个父类,在构行时会按继承的顺序调用父类的构造函数。
5、在析构时子类会先调用自己的析构函数,然后按照继承表的逆序调用析构函数。
C++ 的继承与虚函数 读书笔记的更多相关文章
- 从零开始学C++之虚继承和虚函数对C++对象内存模型造成的影响
首先重新回顾一下关于类/对象大小的计算原则: 类大小计算遵循结构体对齐原则 第一个数据成员放在offset为0的位置 其它成员对齐至min(sizeof(member),#pragma pack(n) ...
- c++虚继承与虚函数
学习继承与多态时看到这两个概念,记录整理. 虚继承与虚函数都是用virtual关键字实现,虚继承为了防止多重继承,而虚函数为了实现多态. 是几个例子. 虚继承: class A{}; class B: ...
- C++多重继承分析——《虚继承实现原理(虚继承和虚函数)》
博客转载:https://blog.csdn.net/longlovefilm/article/details/80558879 一.虚继承和虚函数概念区分 虚继承和虚函数是完全无相关的两个概念. 虚 ...
- C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类
类继承 在C++类继承中,一个派生类可以从一个基类派生,也可以从多个基类派生. 从一个基类派生的继承称为单继承:从多个基类派生的继承称为多继承. //单继承的定义 class B:public A { ...
- C++学习 之 类的继承中的虚函数(笔记)
1.多态行为 多态是面向对象语言的一种特征,让我们能够以类似的方式处理不同类型的对象.在C++中我们可以通过继承层次结构实现子类型多态. 我们可以通过下面的代码进一步了解多态: #include< ...
- C++ Pirmer : 第十五章 : 面向对象程序设计之基类和派生的定义、类型转换与继承与虚函数
基类和派生类的定义以及虚函数 基类Quote的定义: classs Quote { public: Quote() = default; Quote(cosnt std::string& bo ...
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
1.虚函数(impure virtual) C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现. 子类可以重写父类的虚函数实现子类的特殊化. 如下就是一个父类中的 ...
- C++中的继承与虚函数各种概念
虚继承与一般继承 虚继承和一般的继承不同,一般的继承,在目前大多数的C++编译器实现的对象模型中,派生类对象会直接包含基类对象的字段.而虚继承的情况,派生类对象不会直接包含基类对象的字段,而是通过一个 ...
- C++基础 (6) 第六天 继承 虚函数 虚继承 多态 虚函数
继承是一种耦合度很强的关系 和父类代码很多都重复的 2 继承的概念 3 继承的概念和推演 语法: class 派生类:访问修饰符 基类 代码: … … 4 继承方式与访问控制权限 相对的说法: 爹派生 ...
随机推荐
- 忽略“Signal: SIGSEGV (Segmentation fault)”
1. touch ~/.gdbinit 2. 在.gdbinit文件中添加“handle SIGSEGV nostop noprint pass”
- springboot-25-springboot 集成 ActiveMq
消息的发布有2种形式, 队列式(点对点) 和主题式(pub/sub) 模式, 队列式发布后, 接收者从队列中获取消息后, 消息就会消失, 但任意消费者都可以从队列中接受消息, 消息只能被接受一次 主题 ...
- mysql RC下不存在则插入
mysql版本:5.7 目的:在RC下,name列上仅有key索引,并发插入name时不出现重复数据 RC不加gap lock,并且复合select语句是不加锁的快照读,导致两个事务同时进行都可插入, ...
- 剑指offer64:滑动窗口的最大值
题目描述: 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4, ...
- rvm is not a function的解决方法
今天在使用rvm 1.9.3 --default设置默认的ruby的命令时出现 RVM is not a function, selecting rubies with 'rvm use ...' w ...
- 正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)
source: https://swtch.com/~rsc/regexp/regexp1.html translated by trav, travmymail@gmail.com 引言 下图是两种 ...
- Python操作 Memcache、Redis
Python操作 Memcached.Redis 一.Memcached和Redis对比 1.1 Memcached和Redis的数据类型对比 memcached只有一种数据类型,key对应value ...
- [日常] Go语言圣经-WEB服务与习题
Go语言圣经-web服务 1.Web服务程序,标准库里的方法已经帮我们完成了大量工作 2.main函数将所有发送到/路径下的请求和handler函数关联起来,/开头的请求其实就是所有发送到当前站点上的 ...
- iOS字体打印
//打印所以字体 NSArray *familyNames = [UIFont familyNames]; for(NSString *familyName in familyNames) ...
- POJ 1284 Primitive Roots 数论原根。
Primitive Roots Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2479 Accepted: 1385 D ...