
OOP
文章平均质量分 72
evanoma
d-y-chp@live.cn
展开
-
interface
让接口容易被正确使用,不易被误用E18 1.限制类型内什么事可以做,什么不可以做。 假设有一个表现日期的类有1个需要用户输入的构造函数。class Date{public: Date(const Year& y,const Mouth& m,const Day& d); …};Date date(Year(1996),Mouth::Mar(),Day(30));原创 2017-07-18 09:35:41 · 254 阅读 · 0 评论 -
encapsulation
encapsulation(封装): 数据应尽可能被封。(并不是单纯的将数据和操作捆绑在一起)越少人看到它,设计者就有越大的弹性来改变它。 1.将成员变量声明为private E22有利于管理和维护改变时避免大量代码被破坏2.尽量使用non-member,non-friend函数替换成员函数 E23 由于成员函数的封装性更低,选择将同一类型操作相关的non-member,non-f原创 2017-07-18 09:40:31 · 483 阅读 · 0 评论 -
多态
多态:不同内容的函数可以共用同一个函数名,运行时选择函数的版本(传入函数的对象类型决定执行函数版本) - 静态多态性:函数和运算符重载(overloaded:同一作用域内名字相同,形参列表不同的函数CP207) 1.不能只有返回类型不同 2.编译器无法区分顶层const,只能区分底层constCP208 3.确定重载函数更容易理解 4.function matching原创 2017-07-18 10:14:27 · 157 阅读 · 0 评论 -
继承方式
private继承 E39 1.也是1种is-implemented-in-terms-of 2.当类A和类B并不存在is-a关系,类A需要访问类B的protected成员或者重新定义其虚函数。 3.首先考虑复合版本的is-implemented-in-terms-of//类A需要类B的某个函数,并且能够修改该函数。class A{//为了使接口被正确使用,定义1个私有成员类C原创 2017-07-18 10:04:54 · 208 阅读 · 0 评论 -
copy-assignment operator
copy-assignment operator(拷贝赋值运算符):作用于已初始化对象 CP4441.定义拷贝赋值运算符时也同时需要定义拷贝控制函数,反之亦然。当需CP448需要析构函数时说明也需要拷贝构造函数或者拷贝赋值函数。CP447 2.由于赋值给const是不合法的,赋值给引用不是用户期望的。所以有const和引用成员的类的copy-assignment operator被定义为删除的原创 2017-07-18 09:54:20 · 2273 阅读 · 0 评论 -
copy constructor
copy constructor(拷贝控制函数):用于初始化新对象类名(const 类名&);//类内声明1.第1个参数必须为引用类型(如果不是需要拷贝实参从而导致无限循环)CP442 2.定义其他构造函数后,编译器还会合成拷贝控制函数 3.拷贝初始化: 将右侧运算对象拷贝到正在创建的对象,可能需要进行类型转换 - 将对象传给非引用类型类型的形参 - 需要返回对象的函数 - 直原创 2017-07-18 09:54:05 · 286 阅读 · 0 评论 -
构造/析构函数
E09不能在构造/析构函数中调用虚函数 1.在调用派生类的构造函数时,会先调用其基类的构造函数。如果基类的构造函数中有虚函数,这时调用的是基类版本(本应该是派生类)的虚函数。 2.在调用派生类的析构函数时,派生类的成员呈未定义值,无法再调用派生类的虚函数。 此时可以将该虚函数改成接受一个参数的非虚函数,同时使基类构造函数接受该参数。之后在派生类的构造函数中将形参传给基类构造函数。此时能原创 2017-07-18 09:44:44 · 220 阅读 · 0 评论