20170118C++阶段班04_STL_03MyString练习讲解
2017-01-18 22:40
169 查看
编程注意点:
1:每次写类的时候都应该把防止二次编译的#pragma once改成宏定义的形式!2:写类可以加上自己的命名空间。
3:用到数的时候,可以宏定义,也可以使用#include<limits>里面的一些最值,最好不要用魔数。
4:每次new数组后最好用memset或者其他的函数把内存全部设置成0x00。
5:字符串长度和空间长度要区分开,是否+sizeof(char)要注意,否则可能出错。获取的时候也应该注意下标系和其他系的差别,不能弄错位。
6:指针相加减是带有类型的,运算后不用再/sizeof();了,memset等函数里面传递的是字节数,没带有类型。
7:有些方法有const和非const两个版本([],at(),begin()等),后者可以拿来对数据更改,前者是为了方便const属性的对象来调用,不能修改const对象的数据。
8:在delete的时候char *p = nullptr; p = new char[10];if(p){delete[]p;}//这个if(p)判断的是p是否有new出空间,如果没有就不会进入。他不会管new出来的空间有不有有效数据。
9:在写拷贝构造函数和operator=的时候一定要注意传递的的对象是否为本身,一开始就因该判断if(*this != rhs);,然后进行操作。
10:非const版本调用const版本:
char& MyString::operator[](size_t pos) { return const_cast<char&>(static_cast<const MyString&>(*this)[pos]);//非const版本调用const版本 }//先转换成const属性的对象,然后调用[]方法就是调用的const[]的方法,最后转换为const_cast<char&>就好了。 const char& MyString::operator[](size_t pos) const { return str_[pos]; }
11:传递对象等参数尽量使用引用,以提高效率。类里面重载的一些方法也可以互相调用。
12:统一一元运算符写成类方法,二元运算符写成友元函数的形式,方便不同方式的调用。