1. 返回指向const对象的引用
返回对象将调用赋值构造函数,返回引用不会。
如果函数的返回值是指向const对象的引用,函数类型应该设置为const。
2. 返回指向非const对象的引用
重载赋值运算符“=”,避免使用复制构造函数
重载与cout连用的运算符“<<”,cout<<s1<<"is coming";operator<<(cout,s1),返回类型只能是ostream&,如果返回的是ostream,则需要调用ostream的复制构造函数,而ostream没有公有的复制构造函数。
3. 返回对象
如果被返回的对象是被调用函数中的局部变量,则不能返回它的引用,因为函数在使用完之后,函数中局部变量的开销就会被释放掉,源目标已经被释放,引用也就无从谈起。
4. 返回const对象
如果一个函数返回的对象不想被修改时,应该返回const对象
总之,如果函数要返回局部对象,则应该返回一个对象,而不是对象的引用;如果函数需要返回一个没有公有构造函数的对象时,需要返回该对象的引用;最后,有些函数既可以返回对象,又可以返回引用时,优先考虑引用,因为这样效率更高。
如果数据成员是非静态const成员或引用,则必须采用初始化列表进行初始化。
如果使用定位new运算符为类对象分配内存,则必须显式地为该对象调用析构函数。方法是使用指向该对象的指针调用析构函数。c++允许类中包含结构、类和枚举类型的定义,这些嵌套类型的作用域为整个类,这意味着它们被局限于类中,不会与其他地方定义的同名结构、类和枚举冲突。
成员初始化列表语法直接使用复制构造函数完成参数的赋值,但是普通的函数首先需要调用默认构造函数,然后使用复制构造函数初始化参数。
基类指针可以在不进行显示类型转换的情况下指向派生类对象:基类引用可以在不进行显示类型转换的情况下引用派生类对象。基于此,函数参数为基类引用,调用函数时,实参可以为基类对象,也可以是派生类对象。
基类对象可以初始化为派生类对象,也可以将派生类对象赋值给基类对象。