摘要:
(参考自《深入理解C++对象模型》)”C++新手一般有两个常见的误解:任何class如果没有定义default constructor,就会被合成一个出来.编译器合成出来的default constructor会明确设定class 内每一个data member的默认值.”现在主要解释第一条为什么是... 阅读全文
摘要:
1. 如果一个类将要作为基类,那么它应该具有一个虚析构函数以防止delete经由基类指针指向的派生类对象时发生的"局部销毁"问题,避免造成内存泄露,数据结构败坏,在调试器上浪费时间等问题;任何带有虚函数的类几乎肯定需要一个虚析构函数.2. 在不必需的情况下不应该将成员函数设为虚函数,否则,如果导致一... 阅读全文
摘要:
1. 某些类的含义决定了它们不具备某些功能,也就是说某些函数不能被创造出来以防被错误的使用(例如定义一个Book类,它含有一个表示ISBN的变量,这种情况下拷贝构造函数以及赋值操作符显然是没有意义的,因为任何两种书的ISBN都不同),但是编译器在类的创建者没有声明默认构造函数,拷贝构造函数,赋值操作... 阅读全文
摘要:
1. 对于内置类型,如果变量在全局作用域内定义,默认初始化为0,如果变量在局部作用域内定义,默认不进行初始化;对于类类型,默认调用默认构造函数进行初始化,如果没有默认构造函数,则必须显式初始化.2. 构造函数对成员进行初始化的动作发生在初始化列表中而不是函数体内,在函数体内进行的"初始化"实际上是赋... 阅读全文
摘要:
1. const可被施加于任何作用域内的对象,函数参数,函数返回类型,成员函数本体.用const修饰指针,如果const出现在*之前,表明指针不能更改所指向的对象的内容,如果const出现在*之后,表明指针只能指向同一块内存.另外int const*p和const int*p含义相同.如果对象成员有... 阅读全文
摘要:
1. 有些情况下,宁可以编译器替换预处理器,因为#define并不被视为语言的一部分从而导致某些问题.2. 不带参数的宏展开引起的符号"丢失"问题. 例如,对于"#define ASPECT_RATIO 1.635",编译器在处理源代码之前ASPECT_RATIO就已经被替换为1.635,于是记号名... 阅读全文
摘要:
1.一开始,C++只是C加上一些面向对象特性,最初名称为"C with Classes"(带类的C).2.如今的C++已经是个多重泛型编程语言,同时支持过程形式(procedural),面向对象形式(object-oriented),函数形式(functional),泛型形式(generic),元编... 阅读全文
摘要:
参考自: http://www.cnblogs.com/hnrainll/archive/2011/07/06/2099494.html http://www.cnblogs.com/MarvinGeng/archive/2012/07/19/2598923.html 1. 函数声明 首先,要实现类 阅读全文
摘要:
参考自: http://www.cnblogs.com/lixiaohui-ambition/archive/2012/08/21/2649052.html http://blog.csdn.net/aobai219/article/details/6092292 http://www.cnblog 阅读全文
摘要:
1. 由条款12知,如果catch子句捕获异常采用按值传递,那么被抛出的异常要被复制两次,这降低了效率,而且将派生类对象传给基类对象有可能会产生切割问题,但是按值传递也有它的好处,在catch子句重新throw异常的时候,它可以选择throw经catch子句处理过的异常还是原来的异常,这增加了灵活性 阅读全文