自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 线性表

一、 线性表的数组描述 当数值满而需要加大数组长度时,数组长度常常是需要加倍的。这个过程称为数组倍增。数组倍增的时间,从渐进意义上面讲,不会大于元素插入的总时间。这里有个定理,如果我们总是按一个乘法因子来增加长度,那么实施一系列线性表的操作所需要的时间与不用改变的数组长度时相比,至多增加一个常数因子。 数组中地址是连续的。所以数组需要足够大的空间。 二、 线性表的链式描述 单向链表 每一个节...

2018-10-28 23:36:12 186

原创 必须返回对象时,别妄想返回一个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 175

原创 将值传递改为地址传递

当构造函数是值传递时,每次传递都要调用多次copy构造函数,这可能使得值传递成为昂贵的(费时的)操作 为什么会调用多次,以下边为例,其中 bool validateStudent(Student s); Student plato; bool platoIsOK=validateStudent(plato); 无疑地Student 的copy构造函数会被调用,以plato为蓝本将s初始化,同样明...

2018-10-14 23:26:39 254

原创 让接口容易被正确实用,不易被误会

接口要规避用户可能犯下的错误。 例如实现一个用来表现日期的class设计构造函数 class Date{ public: Date(int month,int day,int year); } 但是这样如果用户误输入一些日期信息或者将信息顺序填错将会发生错误。 这样我们可以导入简单的外覆环境来区别天数,月份和年份,然后于Date构造函数中使用这些类型: struct Day { explicit...

2018-10-14 22:44:06 202

原创 成对使用new和delete时要采取相同形式

new可分为两种情况,基本类型和复杂类型。 基本类型比如int类型直接调用operator new分配内存 复杂类型比如自己定义的类,先调用operator new,然后调用构造函数分配内存 new[]也分为两种情况 基本数据类型和new情况类似,计算内存大小直接调用operator new[]。 复杂类型,先调用operator new[],然后在这个指针前分配四个内存用于存放数组大小,最后根...

2018-10-14 21:31:40 150

原创 复制对象时勿忘其中每一个成分

Copying函数应该确保复制“对象内的所有成员变量”及“所有的base class成分”。 不要尝试以某个copying函数实现另一个copying函数。应该将共同机能放进第三个函数中,并由两个coping函数共同调用。 ...

2018-10-14 21:20:16 154

原创 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 12209

原创 析构函数的使用

当有多态性质的基类里面应该声明一个 virtual的析构函数。

2018-09-16 16:34:38 1345

原创 编译器自动生成的函数

编译器自动生成了哪些函数 编译器自动创建了default构造函数,copy构造函数,copy assignment操作符和构造函数。 例如你写下一个函数 class Empty{ }; class Empty { public: Empty(){….} Empty(const Empty& rhs) {…….} ~Empty() {……} ...

2018-09-16 14:27:20 607

原创 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 317

原创 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 120

原创 const优于#define

为什么有很多程序都将#define替换为const呢。 #define通常不被视为语言的一部分 当变量定义为 #define ASPECT_RATIO 1.636,当你运行常量获得一个编译错误时,可能会获得一个 1.636的编译错误,而不是 ASPECT_RATIO,如果这个程序不是你写的,你会感到很困惑。 不能在类里面定义 private #define 因为一旦定义为这种情况...

2018-09-08 23:45:25 109

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除