关于c++,最常听到的一个抱怨是,编译器背着程序员做了太多事情,conversion运算符是最常被引用的一个例子:jerry schwarz,iostream函数库的建筑师,就曾经说过一个故事,他说他最早的意图是支持一个iostream class object的纯量测算(scalar test),类似这样: if(cin) ... 为了让cin能够求得一个真假值,jerry首先为它定义了一个conversion运算符operator int(),运行良好,但是在下面的这种错误的程序设计中,它的…
默认构造函数的构造操作.拷贝构造函数额构造操作  注意:默认构造函数和拷贝构造函数在必要时的时候由编译器产生出来. 参考资料 关于默认构造函数的几个错误认识(四种情况下,编译器会生成默认构造函数)…
成员们的初始化队伍(member Initia 有四种情况必须使用member initialization list: 1. 当初始化一个reference member时: 2. 当初始化一个const member时: 3. 当调用一个base class的constructor,而它拥有一组参数时: 4.当调用一个member class的constructor,而它拥有一组参数时: 在这四种情况下,程序可以被正确编译运行,但是效率不高.例如: class Word { String n…
BMNG构造函数深入分析 一.主要类图 二.主要功能: 1)        BMNG类 BMNG类将包含以“Blue Marble”为主题的所有可渲染影像的根节点添加到当前星球的可渲染对象列表中,包括“ \Data\Earth\BmngBathy\”目录下的随源代码发布的12幅图像.从NASA服务器上下载的经过分层分级过的瓦片影像.根节点m_RenderableList主要用来存放下面三个RenderableObjectList类型对象:m_BlueMarbleList.m_ShadedList…
http://www.delphi2007.net/delphiblog/html/delphi_2004511950333715.html 前言 近期,一直在使用 C++ 与 Object Pascal (后面简称 OP)深入学习面向对象编程(Object-Oriented Programming 后面简称 OOP). 说到 OOP ,其实我早在四年前就已经开始接触这个概念了,用 Delphi 作为开发平台,语言是 OP, 因为当时是我学习编程的初级阶段,感觉 Delphi 学习起来比较容易,…
关于默认拷贝构造函数,有一点和默认构造函数类似,就是编译器只有在[需要的时候]才去合成默认的拷贝构造函数. 在什么时候才是[需要的时候]呢? 也就是类不展现[bitwise copy semantics]时,即不展现[逐位次拷贝]时,才会合成默认拷贝构造函数. 所谓的[逐位次拷贝],也就是简单的赋值,不管类内的数据成员是int还是char*指针,都是简单的赋值,这叫[逐位次拷贝]. 那什么请下不展现[逐位次拷贝]呢? 有四种情况: ①类中有一个类对象成员,而该类对象成员声明了一个默认拷贝构造函数…
前言 对于一个没有实例化的空类,编译器不会给它默认生成任何函数,当实例化一个空类后,编译器会根据需要生成相应的函数.这类函数包括一下几个: 构造函数 拷贝构造函数 析构函数 赋值运算符 在上一篇博文C++对象模型的那些事儿之三:默认构造函数中讲到,编译器在需要的时候会合成一个空构造函数.本篇博文中就重点来介绍一下第二主角:拷贝构造函数. 引子 正如Linus Torvalds说的一句话:"Talk is cheap,Show me the code".在程序员的世界里,讲再多都不如直接…
前言 继前两篇总结了C++对象模型及其内存布局后,我们继续来探索一下C++对象的默认构造函数.对于C++的初学者来说,有如下两个误解: 任何class如果没有定义default constructor,就会被合成出来 编译器合成出来的default constructor会显示设定"class内每一个data member的默认值" 如果读者对这两句话理解颇深,了解里面的陷阱,那么可以不必阅读下去:倘若你有一点点疑惑,那非常好,跟着我一起继续下去! 无用(trivial)的构造函数 一…
最近在学习C++对象模型,看的书是侯捷老师的<深度探索C++对象模型>,发现自己以前对构造函数存在很多误解,作此笔记记录. 默认构造函数的误解 1.当程序猿定义了默认构造函数,编译器就会直接使用此默认构造函数 来一个简单的栗子 class Student; class School { public: School(){} ... Student students; }; 我们知道,一个对象,在定义的时候就一定会调用其构造函数.而在我们上面的默认构造函数,明显没有调用students的构造函数…
带有虚函数的情况. 下面情况编译器也会在需要的时候为其合成. 1.如果一个类自己声明为虚函数. 1 #include<iostream> 2 using namespace std; 3 class Base 4 { 5 public: 6 virtual void foo(){} 7 }; 8 int main() 9 { 10 Base b; 11 while (1); 12 return 0; 13 } 分析:由于类中声明了虚函数,所以编译器会为其合成一个出来,这个合成的默认构造函数的作…