IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ 构造函数、析构函数、拷贝构造函数及赋值运算符重载 -> 正文阅读

[C++知识库]C++ 构造函数、析构函数、拷贝构造函数及赋值运算符重载

构造函数

概念及特性

对于类中的成员变量,可以通过调用方法来给对象赋值,但如果每次创建对象都得调用一次,未免有些麻烦
那有没有方法能在实例化对象时就调用并能将信息设置进去呢
	
  1 #include <iostream>
  2 using namespace std;
  3                                       
  4 class Test                            
  5 {                                     
  6   public:                             
  7     Test()                            
  8     {                                 
  9       cout << "this is a test" << endl;
 10     }                                  
 11   private:                            
 12     int m_data;                       
 13 };                                    
 14                                       
 15 int main()                            
 16 {                                     
 17   Test t;                             
 18   return 0;                           
 19 } 

在这里插入图片描述

构造方法(构造函数)是一个特殊的成员函数,虽然名字叫做构造函数,但它的主要任务并不是开空间创建对象,而是初始化对象
它的特性在于:
	1、名字必须与类相同
	2、不能有任何返回值
	3、对象实例化时编译器自动调用对应的构造函数,且在对象的生命周期中只调用一次
	4、构造函数可以重载
    1 #include <iostream>
  2 using namespace std;
  3 
  4 class Test
  5 {
  6   public:
  7     Test()
  8     {
  9       m_data = 10;
 10     }
 11     Test(int data)
 12     {
 13       m_data = data;
 14     }
 15     int Getdata()
 16     {
 17       return m_data;
 18     }
 19   private:
 20     int m_data;
 21 };
 22 
 23 int main()
 24 {
 25   Test t1;
 26   Test t2(100);
 27   cout << "m_data of t1 = " << t1.Getdata() << endl;
 28   cout << "m_data of t2 = " << t2.Getdata() << endl; 
 29   return 0;
 30 }

在这里插入图片描述

这样我们就完成了在实例化对象时对成员变量的初始化

析构函数

概念

与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由于对象在销毁时会自动调用析构函数,完成类的一些资源清理工作

特性

析构函数是特殊的成员函数
特征如下:
	1、析构函数名是在类名前加上字符“~”
	2、无参数无返回值(不能重载)
	3、一个类有且只有一个析构函数
	4、对象生命周期结束时,C++编译系统自动调用析构函数
  1 #include <iostream>
  2 using namespace std;
  3 
  4 class Test
  5 {
  6   public:
  7     Test()
  8     {
  9       m_data = 10;
 10     }
 11     ~Test()
 12     {
 13       cout << "end" << endl;
 14     }
 15     int Getdata()
 16     {
 17       return m_data;
 18     }
 19   private:
 20     int m_data;
 21 };
 22 
 23 int main()
 24 {
 25   Test t1;
 26   cout << "m_data of t1 = " << t1.Getdata() << endl;   
 27   return 0;
 28 }

在这里插入图片描述

拷贝构造函数

概念

构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),再用已存在的类类型对象创建新对象时由编译器自动调用
  1 #include <iostream>
  2 using namespace std;
  3 
  4 class Test
  5 {
  6   public:
  7     Test()				//构造函数
  8     {
  9       m_data = 10;
 10     }
 11     Test(const Test &t)	//拷贝构造函数
 12     {
 13       m_data = t.m_data;
 14     }
 15     ~Test()
 16     {
 17 
 18     }
 19     int Getdata()
 20     {
 21       return m_data;
 22     }
 23   private:
 24     int m_data;
 25 };
 26 
 27 int main()
 28 {
 29   Test t1;
 30   Test t2(t1);	//等价于Test t2 = t1;
 31   cout << "m_data of t1 = " << t1.Getdata() << endl;
 32   cout << "m_data of t2 = " << t2.Getdata() << endl;
 33   return 0;
 34 }

在这里插入图片描述

为什么要使用const修饰?
答:为了保证引用的对象不被修改

特征

1、拷贝构造函数是构造函数的一个重载形式
2、拷贝构造函数的参数只有一个且必须使用引用传参,使用传值方式会引发无穷递归调用

赋值运算符重载

运算符重载

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数
函数名字为:关键字operator后接需要重载的运算符符号
函数原型:返回值类型 operator操作符(参数列表)
注意:
1、不能通过连接其他符号来创建新的操作符
2、重载操作符必须有一个类类型或者枚举类型的操作数

如下便是等号的重载,而在重载中设定了检测是否自己给自己赋值,使得函数可以连续赋值

在这里插入图片描述

赋值运算符主要有四点:
1、参数类型
2、返回值
3、检测是否自己给自己赋值
4、返回*this
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:12:56  更:2021-11-10 12:14:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:40:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码