CPP学习记录
最近跟着侯捷老师重新学了一下cpp,当然还没学完,先记录一下.
类
CPP的类分为两种:
一种是带指针的类,
一种是不带指针的类,
最经典的就是complex和string两个类.
类的内部里有成员函数,和数据成员,一般来说优秀的类数据成员 都是私有的
成员函数的const缀代表不会改变对象值
类在创建对象的时候会有构造函数,带指针的类和不带指针的类在写构造函数的时候略有不同,
带指针的类如果直接进行赋值那就是浅拷贝只是将在指针指向了同一块地址,可能会引起内存泄漏
如果构造函数中使用了动态分配,我们需要重载一下析构函数,将动态分配的空间释放掉,避免内存泄漏
构造函数
构造函数时在声明对象的时候自动调用,构造函数可以被重载,构造函数有一种特殊的初始化方法,叫做初始化列表
MyComplex(double r = 0, double i = 0) : re(r), im(i) {}
当然上面的 构造函数也可以写成这样
MyComplex(double r = 0, double i = 0) { re = r; im = i; }
但是这种方法的效率并不高,因为,对一个变量设定值,是有两个过程的,第一部分时初始化,第二部分是赋值,方法一是直接初始化给值,
而方法二是赋值,跳过了初始化.虽然结果一样,但是,我们仍需要注意效率问题,毕竟CPP最大的优势还是在于执行效率,这里慢一点那里慢一点,CPP的优势就很难体现出来了
构造函数这一块还涉及到的拷贝构造,深复制和浅复制,浅复制的内存泄漏一般出现在带指针的类中.一般这种类需要重写构造函数.这里先放放,我学完再补
// 预留
函数传参
pass by value VS pass by reference(to const)
pass by value 会把所有数据 push 到栈 中 大量的数据 会导致栈的溢出,建议所有数据都传引用,无论多大的数据指针大小只取决于编译器和CPU,不过有些时候传value会比传reference更快,但是普遍来说reference会比value更快,如果想和传值一样 不改变原本的数据,可以考虑使用 const 进行修饰
函数返回
return by value vs return by reference
与传参相同,为了提高效率尽可能选择 by reference