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

特别的构造函数语法与访问函数
  1. C++拥有宽松的规则。通常,单参数构造函数定义了一个隐式类型转换(implicit type conversion),该转换会创建一个临时对象,然后调用对应的构造函数(我理解是单参数的那个构造函数,直接将右值作为参数进行构造了)初始化对象。使用explicit构造函数可以避免隐式转换。
  2. 只进行检测而不改变对象的状态的函数成为访问函数(accessor)。改变对象状态的成员函数成为修改函数(mutator)
  3. 访问成员函数必须在圆括号后加上const,才能成为访问成员函数(因为不能修改 - -),试图修改,会在编译阶段报错。
C++细节
  1. 建议合并new操作和指针的声明,以避免空指针的存在。即T* p = new T();
  2. 一般来说,简单类型(基本类型)使用按值调用,否则使用引用调用或常量引用调用。
  3. 如果返回值为类对象,使用常量引用返回是一种比较节省开销的返回值,但是一定要注意返回值不能使用函数内的局部变量,否则变量已经被销毁。
  4. 一个比较标准的赋值操作符重载
        Person& operator=(const Person& x)
        {
            if (this != &x) { //standard alies test
                this->age = x.age;
                this->name = x.name;
            }
            return *this;
        }
  5. 可以通过把赋值操作符放在private里,已达到屏蔽=的目的。
  6. 要注意成员变量中有指针类型的情况,使用赋值操作符或者拷贝构造函数时,如果使用浅拷贝,很容易造成内存泄漏或者同一块内存地址释放两次。
  7. 当传递数组int arr[10]时的arr时,其实只传递了数组首元素的首地址,并没有包含数组的索引大小。
模板
  1. 如果一个模版函数和一个非模版函数都可以匹配的话,非模版具有优先权。
  2. 如果有两个同样相似的模板,编译器会报错。(我理解是比如在多参数输入的时候,比如bool compare(type x, type)和bool compare(type x, Person y),模板类型type都可以用Person来替代,也就是第一个和第二个模板函数,虽然参数不同但是同样相似,编译器就会报错)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值