本篇内容主要讲解“C++构造函数,复制构造函数和重载等号运算符怎么调用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++构造函数,复制构造函数和重载等号运算符怎么调用”吧!
初学C++发现了下面这个问题,其中Duck是一个已知的类,并以多种方式指定对象的值:
Duck d1(); Duck d2(d1); Duck d3 = d1; Duck d4; d4 = d1;
问题在于,上述d1、d2、d3、d4是如何创建的呢?分别调用的哪个函数呢?
C++中,赋值和初始化是两个不同的概念:
初始化是指对象创建之时指定其初值,分为直接初始化和复制初始化两种(一句);
赋值是指对象创建以后指定其值(两句);
对于上述d1、d2、d3、d4的创建来说,分别对应下述情况:
Duck d1(); // 直接初始化 Duck d2(d1); // 复制初始化 Duck d3 = d1; // 复制初始化 Duck d4; // 未初始化 d4 = d1; // 赋值
直接初始化时,参数为对象所需的值,此时调用构造函数;复制初始化时,参数是一个已存在的类对象,此时调用复制构造函数;赋值时,对象是已经定义好的,调用“重载的等号赋值操作”,使用另一个对象的值计算出此对象的值。
Duck d1(); // 调用构造函数 Duck d2(d1); // 调用复制构造函数 Duck d3 = d1; // 调用复制构造函数 Duck d4; // d4 = d1; // 赋值
需要特别注意的是下面两种方式都是初始化,而且都是调用的复制构造函数,容易误以为第二种方式是赋值:
Duck d2(d1); Duck d3 = d1;
对于上述Duck
类的初始化以及赋值方式,为了正确的测定每种情况分别调用了什么函数,下面的类中包含了构造函数、复制构造函数、重载等号赋值运算符函数:
class Duck{ public: Duck() { cout << "constructing !!!" << endl; }; Duck(const Duck &d) { cout << "copying !!!" << endl; } Duck& operator=(const Duck &another); }; Duck& Duck::operator=(const Duck &another) { cout << "operator= !!!" << endl; return *this; }
使用Section 1
和Section 2
中的各种方式指定对象的值时,可以方便的确定出各个函数的调用情况。
到此,相信大家对“C++构造函数,复制构造函数和重载等号运算符怎么调用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。