广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++构造函数+复制构造函数+重载等号运算符调用
  • 924
分享到

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

2024-04-02 19:04:59 924人浏览 八月长安
摘要

目录前言:1、赋值和初始化的区别2、初始化和赋值分别调用哪个函数?3、编写测试类前言: 初学c++发现了下面这个问题,其中Duck是一个已知的类,并以多种方式指定对象的值: Duck

前言:

初学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++函数调用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++构造函数+复制构造函数+重载等号运算符调用

本文链接: https://www.lsjlt.com/news/141927.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++构造函数+复制构造函数+重载等号运算符调用
    目录前言:1、赋值和初始化的区别2、初始化和赋值分别调用哪个函数?3、编写测试类前言: 初学C++发现了下面这个问题,其中Duck是一个已知的类,并以多种方式指定对象的值: Duck...
    99+
    2022-11-13
  • C++构造函数,复制构造函数和重载等号运算符怎么调用
    本篇内容主要讲解“C++构造函数,复制构造函数和重载等号运算符怎么调用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++构造函数,复制构造函数和重载等号运算符怎么调用”吧!前言:初学C++发现...
    99+
    2023-06-29
  • C++构造析构赋值运算函数应用详解
    目录了解C++默默编写哪些函数不想使用编译器函数为多态基类声明virtual析构函数别让异常逃离析构函数绝不在构造和析构过程中调用virtual函数令operator=返回一个ref...
    99+
    2022-11-13
  • 详解C++中赋值,关系,函数调用运算符重载的实现
    目录赋值运算符重载类结构问题的出现具体实现关系运算符重载类结构具体实现函数调用运算符重载类结构具体实现总结赋值运算符重载 在C++中基本数据类型例如整型,可以实现连续赋值:a=b=c...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作