–本文来自侯捷老师的C++面向对象高级编程和自己的理解形成的笔记
若有错误,欢迎指正
头文件引入时,调用系统的用 <>,使用自己的用 " "
C++的类一般分为两种,一种是带指针的,一种是不带指针的。
自定义类较为正规的写法如下:
此种做法的意义在于防止被反复调用以及先后调用时出错。只有当该类未被定义的时候,才会调用此文件去定义这个类。
我们需要尽量将成员函数声明为内联(inline)函数,尽管编译器对某些函数的处理不会按照内联函数来,但还是能提前处理一个就提前处理一个。
此外,在构造函数赋值的时候,尽量使用 “:”,初值列的格式。
此种做法会在初始化阶段给值,效率会高上那么一点。
还有一个原因是当含有成员类的时候,则必须采用这种方法去初始化。同时,类中的const常量,也只能用这种方式去初始化。
**此外,如果已经拥有了带默认值的构造函数,则不能额外再写一个空的构造函数。**因为这样会让编译器无法确定在没有参数的时候,具体调用哪一个函数。
构造函数也是可以放在private里面的,单例模式就使用了这种方法。
不改变数据的成员函数一定要加const,这是为了将来的使用者可以正确调用该方法。
能传引用的地方一定要传引用。
这里正好解释一下传值调用,传指针调用和传引用调用的区别:
(1)传值调用: 传值调用的时候,函数参数压栈的是参数的副本,是变量的拷贝。 因此任何的修改都仅仅作用在副本上,不会改变原本变量的值。但也因为拷贝这个操作,会降低传递效率。
(2)传指针调用: 本质上也是一种传值调用,只不过传递的是地址值,压栈的是指针的副本。 好处在于可以少开辟一些空间。比如值传递64位下传递一个long值需要8bit,但是传指针只需要地址空间长度4bit。除此之外,还可以通过解指针操作去改变变量。
(3)传引用调用: **传递的就是实参本身,而不是实参的一个拷贝。**效率高。并且形参的修改就是实参的修改,也因此需要善用const
此外,函数返回值的传递也尽量使用引用。
该方式最大的好处在于不会产生返回值的副本。
只要不开辟新的空间就可以将返回值设成引用返回。
比如重载"+=“一般可以,因为会存放到左边的操作数的地址里。
而重载”+"不可以使用引用,因为需要一块新的空间来存放结果。
友元函数可以拿到private里面的数据。
所有的成员函数都有一个隐藏指针this,this为调用该函数的对象的地址。
以上为类中需要注意的一些操作和原因。