我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

本篇内容主要讲解“C++构造函数,复制构造函数和重载等号运算符怎么调用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++构造函数,复制构造函数和重载等号运算符怎么调用”吧!

前言:

初学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++构造函数,复制构造函数和重载等号运算符怎么调用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

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

本篇内容主要讲解“C++构造函数,复制构造函数和重载等号运算符怎么调用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++构造函数,复制构造函数和重载等号运算符怎么调用”吧!前言:初学C++发现
2023-06-29

C++ 函数重载是否适用于构造函数和析构函数?

c++++ 构造函数支持重载,而析构函数不支持。构造函数可具有不同的参数列表,而析构函数只能有一个空参数列表,因为它在销毁类实例时自动调用,不需输入参数。C++ 中函数重载是否适用于构造函数和析构函数?引言函数重载允许函数在名称相同的情
C++ 函数重载是否适用于构造函数和析构函数?
2024-04-14

C#中怎么复制构造函数

这期内容当中小编将会给大家带来有关C#中怎么复制构造函数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我们在讨论C#复制构造函数之前想要明白什么是复制构造函数?我们知道构造函数是用来初始化我们要创建实例的
2023-06-18

C#中怎么调用构造函数

这篇文章给大家介绍C#中怎么调用构造函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#调用构造函数是如何的呢?让我们首先来看看什么是构造函数?C#调用构造函数之构造函数定义:它是在创建给定类型的对象时执行的类方法。
2023-06-17

C#中怎么实现复制构造函数

C#中怎么实现复制构造函数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C#复制构造函数的一点认识:某些编程语言的类提供了复制构造函数,即从当前类实例构造一个新的类实例。在
2023-06-18

C#中怎么调用继承构造函数

今天就跟大家聊聊有关C#中怎么调用继承构造函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C#类的继承,构造函数实现及其调用顺序类层层派生,在实例化的时候构造函数的调用顺序是怎样的
2023-06-18

C#中怎么实现构造函数的复制操作

今天就跟大家聊聊有关C#中怎么实现构造函数的复制操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C#复制构造函数的编写代码:class Person { private str
2023-06-18

C++编程语言中赋值运算符重载函数怎么使用

本文小编为大家详细介绍“C++编程语言中赋值运算符重载函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++编程语言中赋值运算符重载函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1 概述1
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录