基本语言细节--《The C++ Programming Language 》--(4)剑指新类型
1.CLASS:
1.新类型主要是指的是“面向对象程序设计”和“通用型程序设计”技术;
2.一个类的定义也通常被称为类的声明!
3.静态成员是类的一部分,只能有唯一一个副本。可以解决全局变量带来的耦合问题!
4.类的布局:将数据放到后面,而图书函数所提供的用户界面,是一种合理的方式;
5.复制构造函数去完成的是对未初始化的存储区的初始化,而复制赋值运算符则是必须正确处理一个结构良好的对象;
6.在一个编译单位里,对非局部变量的构造将按照他们的定义顺序进行!而对于不同的编译单位里,构造顺序依赖于具体的实现!
7.临时对象将在建立他们的那个完整表达式结束时销毁!
8.在复制赋值里需要检查自我赋值!
2.派生类:继承、多态
1.派生类的成员没有能力访问基类的私有成员!那是因为,如果可以的话,那么程序员只需从这个类派生便可以得到基类私有成员的访问权!这样做,就使得私有成员成为了一种摆设;若想要派生类可以使用,可以只用保护成员;
2.为了虚函数声明可以起到在派生类里定义的函数的界面的作用那么在对有关参数的描述中必须与基类一致,而只允许在返回类型上允许有小小的改变!
3.虚函数声明为纯虚函数,使得这个类成为抽象类,已不能实例化出对象;而这种类最重要的用途就是提供一个界面,而又不暴露出任何的实现细节;要知道,纯虚函数,可以有实现体,也可以没有!其只是为了说明,这是一个抽象类!
4.抽象类的层次结构是一种表述概念的清晰而强有力的方法,又不会用实现细节或者运行时的额外开销去妨碍这种表述;
5.用指针或者是引用避免切割;
3.异常处理
1.用异常做错误处理;
2.避免从析构函数里抛出异常;
3.当心new在发生异常时没有释放,而导致存储的流失;
4.在设计前期,开发一种错误处理策略;
4.类层次结构
1.重载的解析不会跨越不同类的作用域;
2.公共基类-----引出虚基类;
3.多重继承
4.访问控制:
类中私有,则可被成员函数和友元函数函数使用;
类中保护,可被成员函数,友元函数使用,派生类的成员与友元函数;
类中公有,可有任何函数使用;
5.应特别指出,声明一些保护成员通常都是设计错误!
6.只有公有基类,才可以使得任何函数均可以将派生类指针转化为基类!
7.dynamic_cast不能违背对private,protected基类的保护!不能进行转换指针或引用。其参数要求多态指针和引用,以进行向下强制或者是交叉强制!而其目标类型不必是多态的!
8.在构造函数或析构函数中,避免调用虚函数!因为在构造函数的地方,尚不是一个完整的对象,不会达到用户预期的结果!
9.应避免强制类型转换!
10.指向成员函数的指针与常规指针是不同的,不能进行赋值操作!静态成员的指针,是一种常规指针,因为,其不与任何对象关联!
11.基类的成员指针,可以赋值给派生类,反过来,却不行!
12.基类析构函数应该为虚,用以让指针或引用正确的调用所指向对象的析构函数!
卧浪居士于HUST 2013.12.18