返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c++特殊构造函数详解
  • 248
分享到

c++特殊构造函数详解

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

目录前言拷贝构造函数一、什么是拷贝构造函数二、调用时机注意浅拷贝和深拷贝总结前言 众所周知,构造函数的作用是类在创建对象时的初始化,而拷贝构造函数则是构造函数里的一种特殊构造。 拷贝

前言

众所周知,构造函数的作用是类在创建对象时的初始化,而拷贝构造函数则是构造函数里的一种特殊构造。

拷贝构造函数

拷贝构造:是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去构造monster4
	monster4.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;
 
}

二、调用时机

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

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

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

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

注意

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

浅拷贝和深拷贝

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

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

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++特殊构造函数详解的文章就介绍到这了,更多相关c++特殊构造函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: c++特殊构造函数详解

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

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

猜你喜欢
  • c++特殊构造函数详解
    目录前言拷贝构造函数一、什么是拷贝构造函数二、调用时机注意浅拷贝和深拷贝总结前言 众所周知,构造函数的作用是类在创建对象时的初始化,而拷贝构造函数则是构造函数里的一种特殊构造。 拷贝...
    99+
    2024-04-02
  • c++特殊构造函数怎么用
    这篇文章给大家分享的是有关c++特殊构造函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。拷贝构造函数拷贝构造:是C++特有的,他是一种特殊的构造函数用于基于一个同一个类的的第一个对象去创造和初始化的一个对...
    99+
    2023-06-22
  • C#构造函数详解
    一、简介 构造函数,基本用法是在类对象声明的时候完成初始化工作。 二、实例构造函数 1、构造函数的名字与类名相同。 2、使用 new 表达式创建类的对象或者结构(例如int)时,会调...
    99+
    2024-04-02
  • 详解C++构造函数
    目录1.作用2.代码举例2.1 示例1:2.2 示例2:3. 使用3.1 使用构造函数初始化3.2 有参数的构造函数3.3 默认的构造函数4. 成员初始化列表例1:正常初始化例2:成...
    99+
    2024-04-02
  • C++构造函数详解
    文章转自公众号:Coder梁(ID:Coder_LT) 上一篇文章我们介绍了定义了类,在使用之前,往往还需要对类进行初始化。这篇介绍的就是对类进行初始化的方法。 像是结构体,我们可以...
    99+
    2024-04-02
  • C++:构造函数,析构函数详解
    目录前言一、面向对象二、构造函数1.基本概念2.构造函数重载1.构造函数分类2.有参构造函数:3.有参构造函数3个调用规则:4.拷贝构造函数5.析构函数总结前言 上期了解C++类中有...
    99+
    2024-04-02
  • C++中构造函数详解
    构造函数按参数为为:有参构造函数和无参构造函数 按类型分为:普通构造函数和拷贝构造函数 构造函数的三种调用方法:括号法,显示法,隐式转换法; //括号法 Person p1; ...
    99+
    2024-04-02
  • C++中的构造函数详解
    目录普通变量的初始化构造函数一定会生成默认构造函数吗?防止隐式类型转换赋值与初始化的区别对象的计数成员初始化的顺序类的引用成员构造函数使用注意事项参考总结普通变量的初始化 当我们在定...
    99+
    2024-04-02
  • C++超详细讲解构造函数
    目录类的6个默认成员函数构造函数特性编译器生成的默认构造函数成员变量的命名风格类的6个默认成员函数 如果我们写了一个类,这个类我们只写了成员变量没有定义成员函数,那么这个类中就没有函...
    99+
    2024-04-02
  • C++浅析构造函数的特性
    目录构造函数的概念构造函数的特性只能有一个构造函数构造函数的概念 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值...
    99+
    2024-04-02
  • C++中的复制构造函数详解
    目录复制构造函数复制构造函数的三种调用复制构造函数的禁用深拷贝与浅拷贝一定会生成默认复制构造函数吗?参考 总结普通变量的复制 有时我们会在定义一个变量的同时使用另一个变量来初始化它。...
    99+
    2024-04-02
  • C++中的拷贝构造函数详解
    目录C++拷贝构造函数(复制构造函数)详解1) 为什么必须是当前类的引用呢?2) 为什么是 const 引用呢?默认拷贝构造函数总结C++拷贝构造函数(复制构造函数)详解 拷贝和复制...
    99+
    2024-04-02
  • C++分析构造函数与析造函数的特点梳理
    目录构造函数的调用构造函数的分类及调用拷贝构造的调用时机深拷贝与浅拷贝构造函数的调用 默认情况下编译器至少给一个类添加3个函数 1.默认构造函数(无参,函数体实现)--完成对象的初始...
    99+
    2024-04-02
  • C++构造函数的特性是什么
    这篇文章主要介绍“C++构造函数的特性是什么”,在日常操作中,相信很多人在C++构造函数的特性是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++构造函数的特性是什么”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-02
  • C++特殊成员详解
    目录const成员static成员友元类总结const成员 1.const数据成员:const类型变量不可修改(只读模式),必须采用初始化参数列表的方式初始化。 2.const成员函...
    99+
    2024-04-02
  • C++超详细讲解拷贝构造函数
    目录构造函数特征编译器生成的拷贝构造拷贝构造的初始化列表显式定义拷贝构造的误区结论构造函数 只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对...
    99+
    2024-04-02
  • C++类与对象及构造函数析构函数基础详解
    目录C++类与对象类的定义对象的创建构造函数和析构函数访问修饰符继承多态成员变量与成员方法总结C++类与对象 C++是一门面向对象的编程语言。在C++中,我们可以利用类来创建对象,...
    99+
    2023-05-16
    C++类对象函数 c++ 构造析构函数
  • C++构造析构赋值运算函数应用详解
    目录了解C++默默编写哪些函数不想使用编译器函数为多态基类声明virtual析构函数别让异常逃离析构函数绝不在构造和析构过程中调用virtual函数令operator=返回一个ref...
    99+
    2024-04-02
  • C# Record构造函数的行为更改详解
    如何更改 C# Record 构造函数的行为 Record[1] 是 C# 9 中的一个新功能。Record是从Structs[2]借用的特殊类, 因为它们具有 基于值的相等性,您可...
    99+
    2024-04-02
  • C++构造函数的初始化列表详解
    目录1.问题2.解决方法(初始化列表)3.顺序问题总结 1.问题 class A { private: int m_a; public: A(int a) { cout ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作