您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法分析 学习笔记(二)

2016-06-24 22:37 267 查看

特别的构造函数语法与访问函数

C++拥有宽松的规则。通常,单参数构造函数定义了一个隐式类型转换(implicit type conversion),该转换会创建一个临时对象,然后调用对应的构造函数(我理解是单参数的那个构造函数,直接将右值作为参数进行构造了)初始化对象。使用explicit构造函数可以避免隐式转换。
只进行检测而不改变对象的状态的函数成为访问函数(accessor)。改变对象状态的成员函数成为修改函数(mutator)
访问成员函数必须在圆括号后加上const,才能成为访问成员函数(因为不能修改 - -),试图修改,会在编译阶段报错。

C++细节

建议合并new操作和指针的声明,以避免空指针的存在。即T* p = new T();
一般来说,简单类型(基本类型)使用按值调用,否则使用引用调用或常量引用调用。
如果返回值为类对象,使用常量引用返回是一种比较节省开销的返回值,但是一定要注意返回值不能使用函数内的局部变量,否则变量已经被销毁。
一个比较标准的赋值操作符重载
Person& operator=(const Person& x)
{
if (this != &x) { //standard alies test
this->age = x.age;
this->name = x.name;
}
return *this;
}

可以通过把赋值操作符放在private里,已达到屏蔽=的目的。
要注意成员变量中有指针类型的情况,使用赋值操作符或者拷贝构造函数时,如果使用浅拷贝,很容易造成内存泄漏或者同一块内存地址释放两次。
当传递数组int arr[10]时的arr时,其实只传递了数组首元素的首地址,并没有包含数组的索引大小。

模板

如果一个模版函数和一个非模版函数都可以匹配的话,非模版具有优先权。
如果有两个同样相似的模板,编译器会报错。(我理解是比如在多参数输入的时候,比如bool compare(type x, type)和bool compare(type x, Person y),模板类型type都可以用Person来替代,也就是第一个和第二个模板函数,虽然参数不同但是同样相似,编译器就会报错)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: