Efective C++(2nd)学习心得
大三都结束了,以前一直是在网上搜别人写的blog来学习学习东西,自己从来没有写过,今天起就开始过把瘾,写写blog...
这几天在看Effective C++(2nd),看得还差不多了,有一种欣喜也有一种震惊吧,原来自己以前学的C++那么肤浅啊...废话不多讲,学习体会如下:
1.C++类中重载操作符的了解:
1.1重载为成员函数还是友元函数,有讲究;
1.2为什么流提取操作符和流插入操作符要声明为类的友元函数;
1.3重载前置++和后置++的方法;
1.4重载函数返回值和返回引用的区别;
1.5单目运算符和双目运算符的重载;
2.C++ class的基本构建
2.1构造函数:默认构造函数,带缺省参数的构造函数,拷贝构造函数,转换构造函数;
2.2赋值操作符的重载;
2.3const限定符的用法;
2.4static限定符的用法;2.5参数化列表的初始化方法,以及该方法和普通赋值之间的区别;
3.C++成员函数的认识
3.1纯虚函数:给出接口,留给基类实现,必须实现;虚函数:给出接口和默认实现,留给基类重新实现;一般的成员函数:表示某种意义上的特殊不变性,在继承的过程中不会被改写;
4.C++的编译和链接
编译是以cpp文件为单位,进行基本的语法检查,并生成对应的二进制obj文件;链接是将obj文件组合起来,会对其中的函数调用进行检查,经过本步骤就可以生成exe文件了; 其实平时我们运行exe文件,是将exe文件载入内存而已;
5.#include "A.h"和class A的区别
在需要class A的具体信息或者说要定义一个A对象时,使用前者;如果说仅仅是需要 A的对象或者引用且不需要A的任何信息时,用类的前式声明就比较好,减少了编译的负担和文件编译之间的依赖性;
6.C++中inline的用法内部原理
inline具有宏的优点消除了函数调用开销,但是会增加代码的体积;inline仅仅是对编译器的一种提示,编译器不一定会采纳;
7.C++类的实现和接口分离的技术
便于实现封装,只留出接口,隐藏实现,减少重复编译,降低文件包含的依赖性....
主要实现途径:
7.1句柄类的实现方法
7.2协议类的实现方法
8.对继承的理解:
公有继承是“有一个”的内涵,即“is-a”,私有继承是“用什么实现的内涵”,除此之外类的分层也蛮有意思即是“has a”的内涵,模板编程其实是一种“用什么实现”的内涵;
9.继承和使用模板的区别和联系:
两者从不同的角度来实现了C++的代码重用:
当对象的类型对于实现的算法没有影响的时候,采用模板的思想;
当对象的类型对于是想的算法有影响的时候,采用继承结合虚函数的方法;
10.注意尽量避免类继承参差的层次的向下转换
第一次写技术blog,就这些吧,贵在坚持....