笔记-2017.10.24
来源:互联网 发布:朋友圈视频转发软件 编辑:程序博客网 时间:2024/06/05 08:14
1.指向基类的指针无法指向由私有和保护继承而来的派生类,因为在派生类中基类数据无法直接访问,仅公有继承可以。对于继承方式为protected和private的派生类对象,基类的公有成员、私有成员和保护成员都是不可见的,所以你把基类指针指向protected和private继承的派生类对象时,对于基类的公有成员,这个对象到底能不能访问到呢?他是基类指针,若是基类对象就该能访问,但指向的是这两种方式继承的对象,按理又不能访问,矛盾了,所以不允许他指向这样的对象。
2.指向普通函数的指针格式为:ReturnVal (*ptr)(<参数列表>)
3.指向成员函数的指针格式为: ReturnVal (ClassName::*ptr)(<参数列表>),使用格式为(Class.*ptr)(<参数列表>)
4.保护继承中,private类型虽为protected,但是被隐藏,派生类中无法访问
5.虚基类的使用情景,现有一派生类由若干个基类继承而来,而这些基类都是由另一个共同基类派生而来,为了使该派生类中只含有一份间接基类成员,可以通过使该间接基类为虚基类,并由若干直接基类继承
6.在MI中,为了保证虚基类在派生类中只继承一次,应当在该基类的所有直接派生类中声明为虚基类。否则仍然会出现对基类的多次继承(这会造成大量的不可预知的二义性问题)。
7.“有4种情况,会造成“编译器必须为未声明constructor的classes合成一个default constructor”。C++ standard把那些合成物称为implicit nontrivial default constructor。被合成出来的constructor只能满足编译器(而非程序)的需要。它之所以能够完成任务,是借着“调用member object或base class的default constructor”或是“为每一个object初始化其virtual function机制或virtual base class机制”而完成的。至于没有存在那4种情况而又没有声明任何constructor的classes,我们说它们拥有implicit trival default constructor,它们实际上并不会被合成出来”
“在合成的default constructor中,只有base class subobjects和member class objects会被初始化,所有其他的nonstatic data member都不会被初始化,这些初始化操作对程序而言或许有需要,但对编译器则非必要”
——<深入探索C++对象模型>47页
(这澄清了两个误区:1.任何class如果没有定义default constructor,就会被合成出一个出来;2.编译器合成出来的default constructor会显式设定class内每一个data member的默认值)
- 笔记-2017.10.24
- 笔记-2017.10.21
- 2017.10.30 学习笔记
- Spring学习笔记24
- java学习笔记24
- 2014.12.24学习笔记
- 24CXX --- STM32笔记
- Java学习笔记24
- iOS笔记24
- 2015.12.24笔记
- 2016.5.24笔记
- 2016.9.24学习笔记
- 12-24 笔记
- 笔记20-24
- 2017.3.24笔记
- C++学习笔记 24
- 学习笔记 Oct 24
- Xcode9学习笔记24
- LogLog Counting
- 关于如何保持图片分辨率并压缩图片存储大小
- 求以邻接矩阵存储的有向无环图中的最长路径
- Unity 导航网格生成碰撞体
- commons-exec执行系统命令
- 笔记-2017.10.24
- 输入多组数据,输入0结束
- HyperLogLog Counting
- LeetCode 8. String to Integer (atoi)
- Hbase 数据写入
- ArcEngine对shp文件的操作(代码总结)
- 自媒体人必备:国内最专业的自媒体平台导航网站,有它就够了
- java中split时,需要转义的几个字符
- 导入android studio项目的各种坑