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

c++特殊构造函数怎么用

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

c++特殊构造函数怎么用

这篇文章给大家分享的是有关c++特殊构造函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

拷贝构造函数

拷贝构造:是C++特有的,他是一种特殊的构造函数

用于基于一个同一个类的的第一个对象去创造和初始化的一个对象

第一的参数是本类的对象的引用(const)

一、什么是拷贝构造函数

一种特殊的构造函数,同一个类的一个对象去创造或初始化一个对象

在没写的时候,是默认存在的,自己写了之后,系统默认的就会消失(这一点,就是构造函数)

拷贝构造函数可以实现:对象的复制

class Monster{public: Monster(Monster& m)//拷贝构造函数(默认形态){//默认的拷贝构造函数(默认形态),将对象一一对应给值cout << "默认的拷贝构造函数(默认形态) " << endl;this->hp = m.hp;}Monster(int hp);//构造函数~Monster();//析构函数void show();private:int hp;};int main(){Monster monster1(100);monster1.show();Monster monster3 = monster1;//使用monster1给monster3初始化monster3.show();Monster monster4(monster1);//使用monster1去构造monster4monster4.show();return 0;}Monster::Monster(int hp){cout << "调用了带参构造函数" << endl;this->hp = hp;}Monster::~Monster(){cout << "调用了析构函数" << endl;}void Monster::show(){cout << "调用了显示函数" << endl;cout<<this->hp << "" << endl; }

二、调用时机

一、函数的参数是:“类的对象”

二、函数的返回值是类的对象

三、使用一的对象给另一个对象初始化

四、使用一个对象构造另一个对象

注意

赋值不属于拷贝构造,所以不调用拷贝构造函数

浅拷贝和深拷贝

浅拷贝就是默认的拷贝构造函数,这个拷贝构造的操作,我们可以理解为,是用&lsquo;=&rsquo;号一个一个的赋值的,我们将之称为,浅拷贝,因为在用指针的时候就可以能会出现问,因为我们知道两个同等类型的指针之间用&lsquo;=&rsquo;号赋值,是两个指针的地址指向同一个内存,那么就可能会存在一个问题,就是两个对象的指针都指向同一个内存,那么如果其中一个对象把该内存释放了,就会导致另外一个对象的指针变成野指针。 

为此,我们就需要进行到深拷贝

public:int *p;Rect();~Rect();int width;//宽int height;//高//重载拷贝构造,实现浅拷贝拷贝Rect(Rect&rect){this->height = rect.height;this->width = rect.width;this->p=rect.p;}
public:int *p;Rect();~Rect();int width;//宽int height;//高//重载拷贝构造,实现深拷贝Rect(Rect&rect){this->height = rect.height;this->width = rect.width;this->p = new int;//重新申请内存*p = *rect.p;//拷贝之前的值}

可见,浅拷贝与深拷贝的差距就是前者是直接拷贝指针,让两个指针同时指向一个地址,这样一方进行析构的时候,另一方就会成为野指针,而深拷贝就是避免了这一点,申请一块新内存,并复制这块内存的数据。

感谢各位的阅读!关于“c++特殊构造函数怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

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

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

c++特殊构造函数怎么用

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

下载Word文档

猜你喜欢

c++特殊构造函数怎么用

这篇文章给大家分享的是有关c++特殊构造函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。拷贝构造函数拷贝构造:是C++特有的,他是一种特殊的构造函数用于基于一个同一个类的的第一个对象去创造和初始化的一个对
2023-06-22

C++构造函数怎么用

这篇文章给大家分享的是有关C++构造函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.作用一种特殊类型的方法,在每次实例化对象时运行2.代码举例2.1 示例1:#include cl
2023-06-25

C++构造函数的特性是什么

这篇文章主要介绍“C++构造函数的特性是什么”,在日常操作中,相信很多人在C++构造函数的特性是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++构造函数的特性是什么”的疑惑有所帮助!接下来,请跟着小编
2023-07-02

C++构造函数怎么使用

这篇文章主要讲解了“C++构造函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++构造函数怎么使用”吧!像是结构体,我们可以使用列表初始化的方法进行初始化:struct Thin
2023-06-22

C++构造函数与析构函数怎么使用

这篇文章主要讲解了“C++构造函数与析构函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++构造函数与析构函数怎么使用”吧!对象的初始化和清理生活中我们买的电子产品都基本会有出厂
2023-07-02

C#中怎么构造函数

本篇内容介绍了“C#中怎么构造函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#构造函数大体上分为静态C#构造函数和实例C#构造函数,实
2023-06-18

C#中的构造函数怎么用

这篇文章主要介绍了C#中的构造函数怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中的构造函数怎么用文章都会有所收获,下面我们一起来看看吧。C# 中的构造函数类的 构造函数 是类的一个特殊的成员函数,当
2023-06-17

C#中怎么调用构造函数

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

C#中怎么使用构造函数

本篇文章给大家分享的是有关C#中怎么使用构造函数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C#构造函数的名字不能随便起,必须让编译器认得出才可以被自动执行。它的命名方法既简
2023-06-17

C#构造函数怎么实现

本篇内容介绍了“C#构造函数怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!选择C#构造函数基类对象总是在任何派生类之前构造的。因此基
2023-06-17

c语言怎么构造函数

c 语言中没有内置构造函数概念,但可通过定义与类同名的 __init__ 函数模拟构造函数行为。该函数用于初始化对象状态和成员变量,提高对象创建过程的控制性和一致性。C语言中构造函数的构造构造函数是什么?构造函数是一个在对象创建时自动调
c语言怎么构造函数
2024-05-21

C++拷贝构造函数怎么使用

本文小编为大家详细介绍“C++拷贝构造函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++拷贝构造函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。构造函数只有单个形参,该形参是对本类类型对
2023-06-30

C++中的拷贝构造函数怎么用

小编给大家分享一下C++中的拷贝构造函数怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!C++拷贝构造函数(复制构造函数)详解拷贝和复制是一个意思,对应的英文
2023-06-29

C++中怎么静态构造函数

C++中怎么静态构造函数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。函数是C++ 语言程序的主要组成部分,一个函数可以调用其他函数。在设计良好的程序中,每个函数都有特定的
2023-06-17

C#中怎么复制构造函数

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

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

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

C#中怎么继承构造函数

这篇文章给大家介绍C#中怎么继承构造函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#继承构造函数的示例:using System; namespace TestApplication { class
2023-06-17

编程热搜

  • 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动态编译

目录