【C++】从入门到精通第二弹——类的构造与析构函数

这里写目录标题

  • 类的构造函数
  • 类的析构函数

写在最前面的话
——构造函数和析构函数是两个特殊的成员函数,都没有返回值,构造函数名和类名相同,析构函数名只是在类名前加上 ~
构造函数主要用来在创建对象时给对象中的数据成员赋值,主要目的是初始化对象,
析构函数的功能与构造函数正好相反,析构函数是用来释放对象的,再删出对象前,对对象进行清理工作。

类的构造函数

当建立一个类的对象时,构造函数就会默认被调用,如果用户不提供构造函数,编译器就会自动实现一个空的构造函数。所以构造函数的主要作用就是完成某些初始化的工作,一般来说,比如设置类成员属性操作,对成员数据赋值等

构造函数类内实现

  1 #include<iostream>2 using namespace std;3 class Person4 {5     public:6         Person(int age, int height)7         {8             this->age = age;9             this->height = height;10         };11         void show()12         {13             cout<<"age = "<<age<<endl;14             cout<<"height = "<<height<<endl;15         }16     private:17         int age;18         int height;19 20 21 };22 23 24 int main()25 {26     Person p(45,123);27     p.show();28     29     return 0;30 }
~      

类外实现:

  1 #include<iostream>2 using namespace std;3 class Person4 {5     public:6 /*        Person(int age, int height)7         {8             this->age = age;9             this->height = height;10         };*/11         Person(int age,int height);//注意一定要在类内先声明12         void show()13         {14             cout<<"age = "<<age<<endl;15             cout<<"height = "<<height<<endl;16         }17     private:18         int age;19         int height;20 21 22 };23 Person::Person(int age,int height)24 {25 26      this->age = age;27      this->height = height;28 }29 30 31 int main()32 {33     Person p(45,123);34     p.show();35 36     return 0;37 }

复制构造函数

  1 #include<iostream>2 using namespace std;3 class Person4 {5     public:6 /*        Person(int age, int height)7         {8             this->age = age;9             this->height = height;10         };*/11         Person(int age,int height);//注意一定要在类内先声明Person::Person(Person &pp);//复制构造函数12         void show()13         {14             cout<<"age = "<<age<<endl;15             cout<<"height = "<<height<<endl;16         }17     private:18         int age;19         int height;20 21 22 };23 Person::Person(int age,int height)24 {25 26      this->age = age;27      this->height = height;28 }29 Person::Person(Person &pp)30 {this->age = pp.age;this->height = pp.height;	}int main(){Person p(45,123);p.show();Person pp(p);pp.show();return 0;}

注意:如果当用户忘记显示声明的默认构造函数,会导致链接出错,所以当我们使用自定义的默认构造函数时必须能实现,哪怕是空实现。

类的析构函数

  1 #include<iostream>2 #include<string.h>3 using namespace std;4 class Person5 {6     public:7         Person();8         ~Person();9         void show();10         char* message;11 };12 Person::Person()13 {14 15     message = new char[1024];16 }17 void Person::show()18 {19     strcpy(message,"fsvfg");20 21     cout<<"message = "<<message<<endl;22 }23 Person::~Person()24 {25     delete []message;26 }27 int main()28 {29     Person p;30     p.show();31 32     return 0;33 }34 

注意:
一个类中只能出现一个析构函数
析构函数不能发生重载
不管是构造函数还是析构函数都不能使用return语句,没有返回值

在不同的环境下构造函数和析构函数调用规则如下:

自动变量的作用域是某个模块,当此模块被激活时,调用构造函数,当退出此模块时,调用析构函数。

全局变量在进入main函数之前调用构造函数,在程序终止时调用析构函数。

动态分配的对象在使用new为对象分配内存时调用构造函数,使用delete删除对象时调用析构函数。

临时变量是编译器为支持计算自动产生的,临时变量生存期的开始和结束点会调用构造函数和析构函数。

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

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

相关文章

MySQL中表格的自我复制,与复制表格

先创建一个空表&#xff0c;my_tab01 CREATE TABLE my_tab01(id INT ,name VARCHAR(32),sal DOUBLE,job VARCHAR(32),deptno INT); SELECT * FROM my_tab01;准备一张有数据的表格&#xff1a; 将另一张表格的数据插入到my_tab01的表格中&#xff1a; -- 演示如何自我复制 --…

前端项目导入vue和element

1.安装nodejs 下载链接https://cdn.npmmirror.com/binaries/node/v18.18.0/node-v18.18.0-x64.msi 进入cmd 命令行模式 管理员身份运行 输入 &#xff08;node -v&#xff09;能看到版本号 npm config set prefix "C:\Program Files\nodejs" 默认路径 npm config…

乌班图搭建 LAMP

搭建 LAMP&#xff08;Linux、Apache、MySQL、PHP&#xff09;堆栈是在 Ubuntu 上构建 Web 服务器的常见任务。以下是一些步骤&#xff0c;指导如何在 Ubuntu 上搭建 LAMP 环境&#xff1a; 步骤&#xff1a; 更新系统软件包&#xff1a; 在终端中执行以下命令&#xff0c;确…

刚柔相济铸伟业 ——访湖南顺新金属制品科技有限公司董事长张顺新

时代在变&#xff0c;唯初心不改。 精致、谦虚、谨慎、儒雅、温和——他就是张顺新&#xff0c;湖南顺新金属制品科技有限公司、湖南顺新供应链管理有限公司董事长&#xff0c;民建长沙市委常委&#xff0c;民建湖南省环资委副主任&#xff0c;省、市民建企联会常务副会长&…

基于SSM+Vue的随心淘网管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

初步使用ActiveMQ

参考&#xff1a;http://t.csdnimg.cn/DxjMm ActiveMQ的安装 官方的下载地址&#xff1a;http://activemq.apache.org/components/classic/download &#xff08;1&#xff09;运行&#xff1a;解压后&#xff0c;进入bin目录&#xff0c;执行对应版本的 activemq.bat 管理页…

官方Redis视图化工具Redisinsight

一、下载最新版本的 docker pull redislabs/redisinsight mkdir /data/redisinsight docker run -d -u root -p 8001:8001 -v /etc/localtime:/etc/localtime -v /data/redisinsight:/db --restartunless-stopped redislabs/redisinsight:latest 二、浏览器打开 http://192…

自动化测试(Java+eclipse)教程

webdriver环境配置 1.下载chromedriver到本地&#xff08;一定要选择和自己浏览器相对应的版本chromedriver下载地址&#xff09; 2.加入到环境变量path中 webdriver工作原理 创建web自动化测试脚本 1.Maven项目创建 File->New->project->(搜索maven)选择maven pr…

爱家房产网站源码 爱家房产网商业版 微信互动营销整合+手机触屏版+经纪人分销

房产网站源码手机访问自动转手机版修改修复如下&#xff1a; 1&#xff0c;修复手机版首页标题头部名称 2&#xff0c;修复手机版首页频道导航按钮 3&#xff0c;新增手机版广告位置显示方式 4&#xff0c;修复手机版首页内容显示样式 5&#xff0c;手机版头部背景颜色ic…

什么是观察者模式?用 Python 如何实现 Observer(观察者或发布订阅)对象行为型模式?

什么是观察者模式&#xff1f; 观察者模式&#xff08;Observer pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象之间建立一种一对多的依赖关系&#xff0c;当一个对象的状态发生变化时&#xff0c;其相关依赖对象都会得到通知并自动更新。 在观察者模式中&am…

Vue3的组合式API介绍,和Vue2生命周期函数的变化

目录 1&#xff0c;setup2&#xff0c;生命周期函数1&#xff0c;为什么删除了 beforeCreate 和 created&#xff1f;2&#xff0c;新增钩子函数 3&#xff0c;compositionAPI 相比于 optionAPI 有哪些优势&#xff1f; Vue3 中新增了 composition API&#xff08;组合式API&am…

三天打鱼两天晒网

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为选择结构编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 二、题目分析 三、解题 程序运行代码 #include<stdio.h> int main(){int n;scanf("%d",&n);i…

Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍

Go 接口&#xff1a;Go中最强大的魔法,接口应用模式或惯例介绍 文章目录 Go 接口&#xff1a;Go中最强大的魔法,接口应用模式或惯例介绍一、前置原则二、一切皆组合2.1 一切皆组合2.2 垂直组合2.2.1 第一种&#xff1a;通过嵌入接口构建接口2.2.2 第二种&#xff1a;通过嵌入接…

Android 笔记: 字符串截取操作方法

1、Android 截取字符串&#xff0c;返回字符串数组&#xff1a; String str “abcd.efg.123456.hijk.345”; String[] strsstr.split(“.”); 2、将字符串从索引号为3开始截取&#xff0c;一直到字符串末尾&#xff08;索引值从0开始&#xff09;: String str “abcdefghijk…

【应用前沿】360QPaaS 精彩亮相首届中国航空制造设备博览会 | 数智航空

近日&#xff0c;首届“中国航空制造设备博览会”&#xff08;CAEE2023&#xff09;在宁波国际会展中心顺利召开&#xff0c;本届大会以“数智产融 开放发展”为主题&#xff0c;以“新技术、新产品、新服务、新企业”为定位&#xff0c;以特色化、专业化、品牌化、高端化为方向…

AVL树详解

目录 AVL树的概念 旋转的介绍 单旋转 双旋转 旋转演示 具体实现 通过高度判断的实现 通过平衡因子判断的实现 AVL树的概念 AVL树是一种自平衡的平衡二叉查找树&#xff0c;它是一种高效的数据结构&#xff0c;可以在插入和删除节点时保持树的平衡&#xff0c;从而保证…

ubuntu 20.04.1 LTS 开机自启动脚本服务开启

sudo vi /etc/systemd/system/rc-local.service 写入以下内容&#xff1a; # SPDX-License-Identifier: LGPL-2.1 # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser Gen…

在HTML单页面中,使用Bootstrap框架的多选框如何提交数据

1.引入Bootstrap CSS和JavaScript文件&#xff1a;确保在HTML页面的标签内引入Bootstrap的CSS和JavaScript文件。可以使用CDN链接或者下载本地文件。 <link rel"stylesheet" href"https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css&q…

04【保姆级】-GO语言指针

之前我学过C、Java、Python语言时总结的经验&#xff1a; 先建立整体框架&#xff0c;然后再去抠细节。先Know how&#xff0c;然后know why。先做出来&#xff0c;然后再去一点点研究&#xff0c;才会事半功倍。适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。对于GO语言&a…

16.字符连接

#include<stdio.h> #include <cstring> int main(){char s1[44];char s2[33];scanf("%s",s1);scanf("%s",s2);strcat(s1,s2) ;printf("连接两个字符为&#xff1a;%s ",s1); return 0;}