怎样构造一个正确高效的C++的类的拷贝构造函数和赋值函数

来源:互联网 发布:mac系统pages怎么保存 编辑:程序博客网 时间:2024/06/05 16:08

推荐一本C++经典好书:effetive c++,该篇文章部分来源于该书


拷贝构造

 

1.了解C++编译器默默编写并调用了哪些函数,若不想使用编译器自动生成的函数,就该明确拒绝(effctive c++条款5,6)


2. 拷贝构造函数的参数可以是一个或者多个,但做起的第一个参数必须是类的引用对象,需要注意的是:一旦定义了拷贝构造函数,则隐式的默认拷贝构造函数便不再有效 了,并且隐式的默认构造函数也不再有效了。


3 拷贝构造函数无函数返回值


4.倘若有指针型成员变量,则要对拷贝构造函数进行重写(见我的另一篇文章:“若类中有指针型数据成员,类的几个函数的重写”)


5.当是派生类构造拷贝构造函数时,注意:复制对象时勿忘其每一部分,

     解决办法:effctive c++条款12

    

 

  赋值


1.了解C++编译器默默编写并调用了哪些函数,若不想使用编译器自动生成的函数,  就该明确拒绝(effctive c++条款5,6)


 2.赋值运算符不能重载为友元函数,只能重载为一个非静态成员函数


3.赋值运算符重载函数是唯一一个不能被继承的运算符函数。.


4.令operator=返回一个引用,这样就可以处理连锁赋值的问题,因为返回引用则其可

以作为左值

         返回值类型是引用,而不是对象,这样,赋值表达式就可以作为左值,比如

       (x=y)++;倘若赋值函数返回的是类的对象,那么赋值后就不能当作左值了。

        (effective c++条款10)

5在operator中处理“自我赋值”(.effctive c++条款11)


6.当类中有指针型数据成员时,赋值函数要进行重写(见我的另一篇文章:“若类中有指针型数据成员,类的几个函数的重写”)


7.当构造的是派生类的赋值函数时:复制对象时勿忘其每一部分,effctive c++条款12

0 0
原创粉丝点击