Loading

随笔分类 -  深度探索C++对象模型

摘要:C++有三种类型的成员函数:static/nonstatic/virtual 一、成员的各种调用方式 C with class 只支持非静态成员函数(Nonstatic member function),20世纪80年代中期,又引入了virtual function,但是有一种常见的观点是:virt 阅读全文
posted @ 2019-10-31 20:15 三只猫- 阅读(166) 评论(0) 推荐(0)
摘要:如下三个类: 一、编译器优化之前的大小: 上述四个类在优化之前的大小分别是:1、8、8 、12 类X明明没有任何成员为什么大小是1byte呢?因为那是编译器插入的一个char,这使得这一class的两个object在内存中有独一无二的地址。 Y和Z的大小都是8,这受到了机器和编译器共同的影响。即以下 阅读全文
posted @ 2019-08-17 14:44 三只猫- 阅读(386) 评论(0) 推荐(0)
摘要:当我们需要设置class member的初值时,要么是经过member initialization list ,要么在construcotr内。 一、先讨论必须使用member initialization list的四种情况: 在以下四种情况,为了能够让程序被顺利编译,必须使用member in 阅读全文
posted @ 2019-08-17 10:24 三只猫- 阅读(186) 评论(0) 推荐(0)
摘要:C++ Standard将copy constructor分为trivial 和nontrivial两种:只有nontrivial的实例才会被合成于程序之中。决定一个copy constructor是否是nontrivial的,则是由classs是否具有 bitwise copy semantics 阅读全文
posted @ 2019-08-17 07:42 三只猫- 阅读(326) 评论(0) 推荐(0)
摘要:C++新手一般由两个常见的误解: 如果任何class没有定义默认构造函数(default constructor),编译器就会合成一个来。 编译器合成的的default constructor会显示的设定“class内每一个data member的默认值” 一、编译器在哪种情况下才会合成默认构造函数 阅读全文
posted @ 2019-08-16 19:34 三只猫- 阅读(398) 评论(0) 推荐(0)
摘要:一、三种程序设计范式: C++程序设计模型支持三种程序设计范式(programming paradiams). 程序模型(procedural model) 抽象数据模型(abstract data type model) 此模型的抽象是和一组表达式(public接口)一起提供,那时其运算定义仍然隐 阅读全文
posted @ 2019-08-15 20:37 三只猫- 阅读(289) 评论(0) 推荐(0)
摘要:————如果不是为了努力维护与C之间的兼容性,C++远比现在简单的多。 如果一个程序员渴望学习C++,但是他却发现书中没有熟悉的struct,一定会苦恼,将这个主题包含到C++里,可以提供语言转移时的救生素,呵呵~多哲学! 阅读全文
posted @ 2019-08-15 20:12 三只猫- 阅读(130) 评论(0) 推荐(0)
摘要:一、C和C++对比: C语言的Point3d: 数据成员定义在结构体之内,存在一组各个以功能为导向的函数中,共同处理外部的数据。 Point3d可能采用独立的“抽象数据类型”(abstract data type)来实现: 二、加上封装之后的布局成本: 加上封装之后,布局成本增加了多少? 并没有增加 阅读全文
posted @ 2019-08-15 15:07 三只猫- 阅读(139) 评论(0) 推荐(0)