C++:构造函数

构造函数

1、与类名同名;

2、不具有任何类型,无返回值;

3、可以重载。

功能:一般用于初始化对象成员变量。

构造函数初始化成员变量:

1、this->成员变量 = 值;

2、初始化列表

  • 一、普通构造函数

1、调用:Stu stu1;

                 Stu stu1(10);

2、声明:Stu();

                 Stu(int size);

                 ..........

  • 二、拷贝构造函数

1、调用:Stu stu2(stu1);   //将对象stu1的内容复制给stu2

                 Stu stu2 = stu1;

2、声明:Stu(const Stu&  obj);  //obj=stu1(引用类型取别名)

3、作用:特殊的构造函数,通常用于复制一个对象的内容给另一个对象。

4、分类:浅拷贝构造函数、深拷贝构造函数

浅拷贝构造函数:当成员变量存在指针时,两个指针会指向同一片空间。

深拷贝构造函数:指针会指向新开辟的空间存放拷贝内容。

5、注意:拷贝构造函数只能存在一个

  • 三、移动构造函数

1、调用:Stu stu2 = Stu(10);

2、声明:Stu(Stu&& obj);

3、作用:用于临时对象时,指针可直接指向临时对象的空间使用。

4、过程:先普通构造创建临时对象,再通过移动构造拷贝临时对象内容(实际上是浅拷贝),最后释放临时对象。

     存在移动构造:普通构造->移动构造

     无移动构造:普通构造->拷贝构造

  • 示例

/*===============================================
  2 *   文件名称:1.cpp
  3 *   创 建 者:     
  4 *   创建日期:2024年02月17日
  5 *   描    述:
  6 ================================================*/
  7 #include <iostream>
  8 #include <cstring>
  9 #include <string>
 10 using namespace std;
 11 
 12 class Stu{
 13 public:
 14     Stu(int size = 0)
 15     {
 16         this->p = new int[size];   //普通构造函数
 17         this->len = size;
 18     }
 19 #if 0    //浅拷贝、深拷贝只会存在一个
 20     Stu(const Stu& obj)
 21     {
 22         this->p = obj.p;          //浅拷贝构造函数,指针指向同一片空间
 23         this->len = obj.len;
 24     }
 25 #else
 26     Stu(const Stu& obj)
 27     {
 28         this->p = new int[obj.len];     //深拷贝构造函数,拷贝内容到自己的空间
 29         for(int i = 0;i < obj.len;i++)
 30         {
 31             this->p[i] = obj.p[i];
 32         }
 33         this->len = obj.len;
 34     }
 35 #endif
 36     Stu(Stu&& obj)
 37     {
 38         this->p = obj.p;   //移动构造,使用临时对象的空间
 39         this->len = obj.len;
 40 
 41         obj.p = nullptr;
 42     }
 43 private:
 44     int *p;
 45     int len;
 46 };
 47 
 48 
 49 int main()
 50 {
 51     Stu S;   //普通构造
 52     Stu A(2);   //普通构造
 53     Stu B(A);   //拷贝构造
 54     Stu C = B;   //拷贝构造
 55     Stu D = Stu(3);    //移动构造(普通构造构造临时对象,再拷贝构造拷贝临时对象,最后释放临时对象)
 56 
 57     return 0;
 58 }
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/479077.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go 是否有三元运算符?Rust 和 Python 是怎么做的?

嗨&#xff0c;大家好&#xff01;本文是系列文章 Go 技巧第十四篇&#xff0c;系列文章查看&#xff1a;Go 语言技巧。 今天来聊聊在 Go 语言中是否支持三元运算符。这个问题很简单&#xff0c;没有。 首先&#xff0c;什么是三元运算符&#xff1f; 在其他一些编程语言中&a…

【Go语言】Go语言中的变量和常量

Go语言中的变量和常量 1 变量 变量相当于是对一块数据存储空间的命名&#xff0c;程序可以通过定义一个变量来申请一块数据存储空间&#xff0c;之后可以通过引用变量名来使用这块存储空间。 Go 语言是强类型静态语言&#xff0c;所以变量的声明与赋值方式与 PHP/Python 等动…

智胜未来,新时代IT技术人风口攻略-第六版(弃稿)

文章目录 前言鸿蒙生态科普调研人员画像高校助力鸿蒙 - 掀起鸿蒙教育热潮高校鸿蒙课程开设占比 - 巨大需求背后是矛盾冲突教研力量并非唯一原因 - 看重教学成果复用与效率 企业布局规划 - 多元市场前瞻视野全盘接纳仍需一段时间 - 积极正向的一种严谨态度企业对鸿蒙的一些诉求 …

学习总结19

# 奶牛的耳语 ## 题目描述 在你的养牛场&#xff0c;所有的奶牛都养在一排呈直线的牛栏中。一共有 n 头奶牛&#xff0c;其中第 i 头牛在直线上所处的位置可以用一个整数坐标 pi(0< pi < 10^8) 来表示。在无聊的日子里&#xff0c;奶牛们常常在自己的牛栏里与其它奶牛交…

MyBatis--02-1- MybatisPlus----条件构造器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言AbstractWrapper 条件构造器官网文档https://baomidou.com/pages/10c804/#abstractwrapper](https://baomidou.com/pages/10c804/#abstractwrapper)![在这里插入…

npm ERR! code CERT_HAS_EXPIRED:解决证书过期问题

转载&#xff1a;npm ERR! code CERT_HAS_EXPIRED&#xff1a;解决证书过期问题_npm err! code cert_has_expired npm err! errno cert-CSDN博客 npm config set registry http://registry.cnpmjs.org npm config set registry http://registry.npm.taobao.org

【Day51】代码随想录之动态规划完全背包_139.单词拆分_背包总结

文章目录 动态规划理论基础动规五部曲&#xff1a;出现结果不正确&#xff1a; 139.单词拆分背包问题0-1背包完全背包 动态规划理论基础 动规五部曲&#xff1a; 确定dp数组 下标及dp[i] 的含义。递推公式&#xff1a;比如斐波那契数列 dp[i] dp[i-1] dp[i-2]。初始化dp数组…

uniapp不同平台获取文件内容以及base64编码特征

前言 文件图片上传&#xff0c;客户端预览是很正常的需求&#xff0c;获取文件的md5特征码也是很正常的&#xff0c;那么&#xff0c;在uniapp中三种环境&#xff0c;h5, 小程序以及 app环境下&#xff0c;如何实现的&#xff1f; 参考&#xff1a; 如何在uniapp中读取文件Arr…

Guitar Pro 8.1 Mac 2024最新下载、安装、激活、换机图文教程

Guitar Pro 8是吉他手的终极工具箱,也是阅读和编辑乐谱的领先软件。26 年来,Guitar Pro 一直在帮助世界各地的音乐家学习弹吉他、创作歌曲以及转录和编辑歌集。 Guitar Pro是一款专业的吉他制谱软件&#xff0c;现在已更新至Guitar Pro8&#xff0c;新增了支持添加音频轨道、支…

C++拷贝构造函数与赋值运算符重载

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、拷贝构造函数 1.概念 在现实生活中&#xff0c;可能存在一个与你一样的自己&#xff0c;我们称其为双胞胎。 那在创…

ClickHouse 基础(一)

官网 ClickHouse release 24.1, 2024-01-30 以毫秒为单位查询数十亿行 ClickHouse是用于实时应用和分析的最快、资源效率最高的开源数据库。 安装ClickHouse 使用ClickHouse&#xff0c;你有三个选择: ClickHouse云:官方ClickHouse作为一项服务&#xff0c;-由ClickHouse的创…

openGauss 5.0.0全密态数据库应用小试

前言 openGauss HCIA教材中&#xff0c;安全是一个重要的章节&#xff0c;在实际项目中&#xff0c;随着网络安全和信息安全形势的变化&#xff0c;企业也越来越重视数据库安全。去年在HALP内部进行openGauss培训时&#xff0c;安全特性就被学员们提出来要重点讲解&#xff0c…