广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++构造函数的类型,浅拷贝与深拷贝实例分析
  • 265
分享到

C++构造函数的类型,浅拷贝与深拷贝实例分析

2023-06-29 18:06:23 265人浏览 独家记忆
摘要

本文小编为大家详细介绍“c++构造函数的类型,浅拷贝与深拷贝实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++构造函数的类型,浅拷贝与深拷贝实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、无

本文小编为大家详细介绍“c++构造函数的类型,浅拷贝与深拷贝实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++构造函数的类型,浅拷贝与深拷贝实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、无参构造函数

如果没有定义构造函数,则系统自动调用此默认构造函数,且什么都不做。

如果用户自定义了带参数的构造函数,若还想调用无参的构造函数,必须显示定义

person() {cout << "this object is being created." << endl;}

二、含参构造函数

一般构造函数可以有各种参数形式,一个类可以有多个一般构造函数,前提是参数的个数或者类型不同(基于c++的重载函数原理)

person(string ID, int age, int height, string sex) {cout<<"含参构造函数调用"<< endl;this.ID = ID;this.age = age;this.height = height;this.sex = sex;}

含参的构造函数还可以使用快速初始化的方法:

person(string ID, int age, int height, string sex) : ID(ID), age(age), height(height), sex(sex) { }

注意:

  • 初始化参数列表和初始化顺序不可以变动

  • 变量名称(不是参数列表名称)一定要和成员变量名一样

三、拷贝构造函数

使用已经创建好的同一类对象,进行构造另一个对象。

person(const person &p) {cout << "拷贝构造函数调用" << endl;this->ID = p.ID;this->age = p.age;this->height = p.height;this->sex = p.sex;}

注意:

但当类中有指针成员时,由系统默认创建该复制构造函数会存在风险,具体原因请查询有关 “浅拷贝“

四、深拷贝和浅拷贝

浅拷贝,指的是在对象复制时,只对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。

例如: person p2 = p1; 这就是浅拷贝,将p1中的成员变量值赋给p2,在这里其实就相当于拷贝构造函数的调用。

但是,浅拷贝,在成员变量是引用类型(指针)时,会出现问题。

  • 传参问题中,地址传递后可以实现swap函数的调用,这就是浅拷贝的原理

  • 当我们使用浅拷贝时,引用类型传递的依旧是地址,这也就是说,拷贝后的对象和拷贝的对象中引用对象指向同一块地址,这样就出现问题了。

在“深拷贝”的情况下,对于对象中动态成员,就不能仅仅简单地赋值了,而应该重新动态分配空间。

如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝。

上面提到,如果没有自定义复制构造函数,则系统会创建默认的复制构造函数,但系统创建的默认复制构造函数只会执行“浅拷贝”,即将被拷贝对象的数据成员的值一一赋值给新创建的对象,若该类的数据成员中有指针成员,则会使得新的对象的指针所指向的地址与被拷贝对象的指针所指向的地址相同,delete该指针时则会导致两次重复delete而出错。

读到这里,这篇“C++构造函数的类型,浅拷贝与深拷贝实例分析”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网其他教程频道。

--结束END--

本文标题: C++构造函数的类型,浅拷贝与深拷贝实例分析

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

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

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

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

下载Word文档
猜你喜欢
  • C++构造函数的类型,浅拷贝与深拷贝实例分析
    本文小编为大家详细介绍“C++构造函数的类型,浅拷贝与深拷贝实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++构造函数的类型,浅拷贝与深拷贝实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、无...
    99+
    2023-06-29
  • C++构造函数的类型,浅拷贝与深拷贝详解
    目录一、无参构造函数二、含参构造函数三、拷贝构造函数四、深拷贝和浅拷贝总结一、无参构造函数 1.如果没有定义构造函数,则系统自动调用此默认构造函数,且什么都不做。 2.如果用户自定义...
    99+
    2022-11-13
  • C++拷贝构造函数(深拷贝与浅拷贝)详解
    对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝...
    99+
    2022-11-15
    拷贝构造函数 深拷贝 浅拷贝
  • Python可变与不可变数据和深拷贝与浅拷贝实例分析
    这篇文章主要介绍“Python可变与不可变数据和深拷贝与浅拷贝实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python可变与不可变数据和深拷贝与浅拷贝实例分析”文章能帮助大家解决问题。浅拷...
    99+
    2023-06-29
  • C++中类对象的拷贝构造函数
    本篇内容主要讲解“C++中类对象的拷贝构造函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中类对象的拷贝构造函数”吧!拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一...
    99+
    2023-06-17
  • C++编程析构函数拷贝构造函数使用示例详解
    目录构造函数析构函数拷贝构造之深拷贝和浅拷贝深浅拷贝区别首先定义一个类进行操作。 class MM { public: protected: int year; ...
    99+
    2022-11-12
  • C++实现拷贝构造函数的方法详解
    目录引入一.什么是拷贝构造函数二.什么情况下使用拷贝构造函数三.使用拷贝构造函数需要注意什么四.深拷贝浅拷贝4.1 浅拷贝4.2 深拷贝引入 对于普通类型的对象来说,他们之间的复制很...
    99+
    2022-11-13
  • C++类继承时的构造函数实例分析
    这篇“C++类继承时的构造函数实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++类继承时的构造函数实例分析”文章吧...
    99+
    2023-06-29
  • C++类的对象作类成员调用构造、析构函数及静态成员实例分析
    这篇文章主要介绍了C++类的对象作类成员调用构造、析构函数及静态成员实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++类的对象作类成员调用构造、析构函数及静态成员实例分析文章都会有所收获,下面我们一起...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作