- 博客(12)
- 收藏
- 关注
原创 线性表
一、 线性表的数组描述当数值满而需要加大数组长度时,数组长度常常是需要加倍的。这个过程称为数组倍增。数组倍增的时间,从渐进意义上面讲,不会大于元素插入的总时间。这里有个定理,如果我们总是按一个乘法因子来增加长度,那么实施一系列线性表的操作所需要的时间与不用改变的数组长度时相比,至多增加一个常数因子。数组中地址是连续的。所以数组需要足够大的空间。二、 线性表的链式描述单向链表 每一个节...
2018-10-28 23:36:12 191
原创 必须返回对象时,别妄想返回一个reference
例如有以下例子const Rational operator*(const Rational& lhs,const Rational& rhs){static Rational result;result=…;return result}bool operator==(const Rational& lhs,const Rational& rhs);...
2018-10-21 23:51:38 179
原创 将值传递改为地址传递
当构造函数是值传递时,每次传递都要调用多次copy构造函数,这可能使得值传递成为昂贵的(费时的)操作为什么会调用多次,以下边为例,其中bool validateStudent(Student s);Student plato;bool platoIsOK=validateStudent(plato);无疑地Student 的copy构造函数会被调用,以plato为蓝本将s初始化,同样明...
2018-10-14 23:26:39 262
原创 让接口容易被正确实用,不易被误会
接口要规避用户可能犯下的错误。例如实现一个用来表现日期的class设计构造函数class Date{public:Date(int month,int day,int year);}但是这样如果用户误输入一些日期信息或者将信息顺序填错将会发生错误。这样我们可以导入简单的外覆环境来区别天数,月份和年份,然后于Date构造函数中使用这些类型:struct Day {explicit...
2018-10-14 22:44:06 213
原创 成对使用new和delete时要采取相同形式
new可分为两种情况,基本类型和复杂类型。基本类型比如int类型直接调用operator new分配内存复杂类型比如自己定义的类,先调用operator new,然后调用构造函数分配内存new[]也分为两种情况基本数据类型和new情况类似,计算内存大小直接调用operator new[]。复杂类型,先调用operator new[],然后在这个指针前分配四个内存用于存放数组大小,最后根...
2018-10-14 21:31:40 163
原创 复制对象时勿忘其中每一个成分
Copying函数应该确保复制“对象内的所有成员变量”及“所有的base class成分”。不要尝试以某个copying函数实现另一个copying函数。应该将共同机能放进第三个函数中,并由两个coping函数共同调用。...
2018-10-14 21:20:16 163
原创 operator=的用法
连续赋值 例如 int x,y,z; x=y=z=15; 为实现上述定义,可定义为 class Widget { public : Widget& operator=(const Widget& rhs) { return* this. } }自我赋值 例如 Widget::operator=(const Widgett& rhs) { del...
2018-09-16 23:59:28 12227
原创 编译器自动生成的函数
编译器自动生成了哪些函数 编译器自动创建了default构造函数,copy构造函数,copy assignment操作符和构造函数。 例如你写下一个函数 class Empty{ }; class Empty { public: Empty(){….} Empty(const Empty& rhs) {…….} ~Empty() {……} ...
2018-09-16 14:27:20 617
原创 C++初始化对象
初始化和赋值的区别 在一个构造函数中,ABEntry:ABEntry(const std::string& name,const std::string& address) { theName=name; theAddress=address; } 这个为赋值语句; ABEntry:ABEntry(const std::string& name,const ...
2018-09-09 23:49:23 332
原创 const注意事项
两种常见的使用方法 void f1(const Widget* pw); void f2(Wideg const *pw); 这两种定义是相同的。将返回值定义为const const Rational operator* (const Rational& lhs,const Rational& rhs);这样可以避免一些低级的错误。...
2018-09-09 21:33:13 132
原创 const优于#define
为什么有很多程序都将#define替换为const呢。#define通常不被视为语言的一部分 当变量定义为 #define ASPECT_RATIO 1.636,当你运行常量获得一个编译错误时,可能会获得一个 1.636的编译错误,而不是 ASPECT_RATIO,如果这个程序不是你写的,你会感到很困惑。不能在类里面定义 private #define 因为一旦定义为这种情况...
2018-09-08 23:45:25 120
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人