C++构造函数+复制构造函数+重载等号运算符调用

C++构造函数+复制构造函数+重载等号运算符调用

目录

前言:

1、赋值和初始化的区别

2、初始化和赋值分别调用哪个函数?

3、编写测试类

前言:

初学C++发现了下面这个问题,其中Duck是一个已知的类,并以多种方式指定对象的值:

Duck d1(); Duck d2(d1); Duck d3 = d1; Duck d4; d4 = d1;

问题在于,上述d1、d2、d3、d4是如何创建的呢?分别调用的哪个函数呢?

1、赋值和初始化的区别

C++中,赋值和初始化是两个不同的概念:

初始化是指对象创建之时指定其初值,分为直接初始化和复制初始化两种(一句);

赋值是指对象创建以后指定其值(两句);

对于上述d1、d2、d3、d4的创建来说,分别对应下述情况:

Duck d1();    // 直接初始化 Duck d2(d1);  // 复制初始化 Duck d3 = d1; // 复制初始化 Duck d4;      // 未初始化 d4 = d1;      // 赋值 2、初始化和赋值分别调用哪个函数?

直接初始化时,参数为对象所需的值,此时调用构造函数;复制初始化时,参数是一个已存在的类对象,此时调用复制构造函数;赋值时,对象是已经定义好的,调用“重载的等号赋值操作”,使用另一个对象的值计算出此对象的值。

Duck d1();    // 调用构造函数 Duck d2(d1);  // 调用复制构造函数 Duck d3 = d1; // 调用复制构造函数 Duck d4;      //  d4 = d1;      // 赋值

需要特别注意的是下面两种方式都是初始化,而且都是调用的复制构造函数,容易误以为第二种方式是赋值:

Duck d2(d1); Duck d3 = d1; 3、编写测试类

对于上述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 1Section 2中的各种方式指定对象的值时,可以方便的确定出各个函数的调用情况。

到此这篇关于C++构造函数+复制构造函数+重载等号运算符调用的文章就介绍到这了,更多相关C++函数调用内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    excel中乘法函数是什么?

    excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

    标准差excel用什么函数?

    标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细

    联想垫a2207如何调用a2207平板评价

    联想垫a2207如何调用a2207平板评价,,联想a2207垫在1600 3G双网双待平板电脑的位置。作为以前的热门产品a2107升级版,a2207处理器取得了可观

    excel常用函数都有哪些?

    excel常用函数都有哪些?,函数,哪些,常用,1、SUM函数:SUM函数的作用是求和。函数公式为=sum()例如:统计一个单元格区域:=sum(A1:A10)  统计多个