c++学习——构造函数和析构函数

news2024/11/27 16:39:03

当对象产生时,必须初始化成员变量,当对象销毁前,必须清理对象.
初始化用构造函数,清理用析构函数,这两个函数是编译器调用.初始化的作用和析构函数的作用

构造函数点和析构函数的注意
构造函数和析构函数的权限必须是公有的
构造函数可以重载
构造函数没有返回值,不能用void,构造函数可以有参数,析构函数没有返回值,不能用void,没有参数
有对象产生必然会调用构造函数,有对象销毁必然会调用析构函数。
有多少个对象产生就会调用多少次构造函数,有多少个对象销毁就会调用多少次析构函数

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

class Maker
{
public:
	//构造函数的作用初始化成员变量  是编译器去调用的
	Maker()
	{
		a = 10;
		cout << "构造函数" << endl;
	}
	//析构函数,在对象销毁前编译器调用析构函数
	~Maker()
	{
		cout << "析构函数" << endl;
	}
public:
	int a;
};

void test01()
{
	//实例化对象,内部做了两件事 
	//1、分配空间
	//2、调用构造函数进行初始化
	Maker m;//栈区
	int b = m.a;
	cout << b << endl;
}

int main()
{
	test01();
	Maker m2;
	system("pause");
	return EXIT_SUCCESS;
}

在这里插入图片描述
这里由于system(“pause”);暂停了,还没有调用析构函数
在这里插入图片描述
暂停结束就调用了析构函数

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

class Maker
{
public:
	//构造函数的作用初始化成员变量  是编译器去调用的
	Maker()
	{
		a = 10;
		cout << "构造函数" << endl;
	}
	//析构函数,在对象销毁前编译器调用析构函数
	~Maker()
	{
		cout << "析构函数" << endl;
	}
public:
	int a;
};

void test01()
{
	//实例化对象,内部做了两件事 
	//1、分配空间
	//2、调用构造函数进行初始化
	Maker m;//栈区
	int b = m.a;
	cout << b << endl;
}

//析构函数的作用
class Maker2
{
public:
	//有参构造
	Maker2(const char* name,int age)
	{
		cout << "有参构造" << endl;
		//从堆区空间申请
		pName = (char *)malloc(strlen(name) + 1);
		strcpy(pName, name);
		mAge = age;
	}

	void printMaker2()
	{
		cout << "name:" << pName << " age:" << mAge << endl;
	}

	~Maker2()
	{
		cout << "析构函数001" << endl;
		//释放堆区空间
		if (pName!=NULL)
		{
			free(pName);
			pName = NULL;
		}
	}
private:
	char* pName;
	int mAge;
};

void test02()
{
	Maker2 m2("贝吉塔", 18);
	m2.printMaker2();
}

int main()
{
	//test01();
	test02();
	Maker m2;
	system("pause");
	return EXIT_SUCCESS;
}

在这里插入图片描述
构造函数和析构函数能够函数重载

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

class Maker
{
public:
	//构造函数的作用初始化成员变量  是编译器去调用的
	Maker()
	{
		a = 10;
		cout << "构造函数" << endl;
	}
	//析构函数,在对象销毁前编译器调用析构函数
	~Maker()
	{
		cout << "析构函数" << endl;
	}
public:
	int a;
};

void test01()
{
	//实例化对象,内部做了两件事 
	//1、分配空间
	//2、调用构造函数进行初始化
	Maker m;//栈区
	int b = m.a;
	cout << b << endl;
}

//析构函数的作用
class Maker2
{
public:
	//有参构造
	Maker2(const char* name,int age)
	{
		cout << "有参构造" << endl;
		//从堆区空间申请
		pName = (char *)malloc(strlen(name) + 1);
		strcpy(pName, name);
		mAge = age;
	}

	void printMaker2()
	{
		cout << "name:" << pName << " age:" << mAge << endl;
	}

	~Maker2()
	{
		cout << "析构函数001" << endl;
		//释放堆区空间
		if (pName!=NULL)
		{
			free(pName);
			pName = NULL;
		}
	}
private:
	char* pName;
	int mAge;
};

class Maker3
{
public://构造函数和析构函数必须是公有权限
	//构造函数可以重载
	Maker3()//无参构造函数
	{
		cout << "Maker3的无参构造" << endl;
	}
	Maker3(int a)//有参构造函数
	{
		cout << "Maker3的有参构造" << endl;
	}
	~Maker3()
	{
		cout << "析构函数" << endl;
	}
};

void test02()
{
	Maker2 m2("贝吉塔", 18);
	m2.printMaker2();
}

void test03()
{
	Maker3 m;//当构造函数私有时,实例化不了对象
	//有对象产生必然会调用构造函数,有对象销毁析构函数
	//有多少个对象产生就会调用多少次构造函数
	//有多少个对象销毁就会调用多少次析构函数
	Maker3 m2(10);
}

int main()
{
	//test01();
	//test02();
	test03();
	//Maker m2;
	system("pause");
	return EXIT_SUCCESS;
}

在这里插入图片描述
默认的构造函数和析构函数

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

class Maker
{
public:
	//Maker()//默认的构造函数,函数体是空的
	//{

	//}
	//~Maker()//默认的析构函数,函数体是空的
	//{

	//}
	//编译器默认提高默认的构造函数和析构函数
	void printfMaker()
	{
		a = 100;
		cout << "a=" << a << endl;
	}
private:
	int a;
};
void test01()
{
	Maker m;
	m.printfMaker();
}
int main()
{
	test01();
	system("pause");
	return EXIT_SUCCESS;
}

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

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

相关文章

Redis基本介绍 五大数据类型

Redis基本介绍 redis-benchmark性能测试工具 测试如&#xff1a; redis-benchmark -h localhost -p 6379 -c 100 -n 10000000 redis默认有16个数据库 切换数据库和查看数据库大小 &#xff1a; 设置值和取值&#xff1a; >set name chunling >get name >keys…

python+django网上美食菜品订餐系统的设计与实现vue

随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;好吃网线上订餐系统当然也不能排除在外&#xff0c;从美食类型、美食信息的统计和分析&#xff0c;在过程中会产生大量的、各种…

与创新者同行,共享数字时代创新红利-通付盾城市沙龙圆满举行!

5月25日&#xff0c;通付盾城市沙龙在深圳圆满举行。通付盾与多家企业分享了数字安全创新实践-“WAAP解决方案、GPT助力APP合规开发解决方案、UIAM解决方案”&#xff0c;与合作伙伴共话生态&#xff0c;共同起航&#xff0c;共创未来&#xff01; 会上&#xff0c;通付盾面向各…

基于java的篮球论坛系统的设计与实现

背景 过网上调查和搜集数据,我们可以发现篮球论坛管理方面的系统在中并不是相当普及,在篮球论坛管理方面的可以有许多改进。实际上如今信息化成为一个未来的趋势或者可以说在当前现代化的城市典范中,信息化已经成为主流,开发一个篮球论坛系统一方面的可能会更合乎时宜,另一方面…

springboot+vue财务管理系统(java项目源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的财务管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&a…

opencv_c++学习(二十四)

一、积分图像 积分图像是对原图像进行积分操作的算法。如上图左所示&#xff0c;不同颜色代表不同区域。当我们想求取一个像素点的积分值时&#xff0c;我们需要求取该点左上方区域的数据之和&#xff0c;如P0的积分值是浅蓝色区域的数据之和。 P1的积分值为蓝色和橙色区域的数…

SSM框架学习-SSM整合(整合配置、功能模块开发、接口测试)

1. 整合配置 首先创建maven模块&#xff0c;导入相应的坐标 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency&g…

计算机是如何工作的??(多进程编程)

目录 多进程编程进程调度组织进程调度 本篇博客的重点知识是进程进程的调度 操作系统&#xff1a;像是windows&#xff0c;android&#xff0c;iOS等都是常见的操作系统 下面是关于计算机在底层工作的原理流程图 在操作系统层面&#xff1a; 对上&#xff0c;要给软件提供稳…

《低代码指南》——低代码维格云能源行业解决方案

目录 典型场景介绍: 一、能源资产管理 二、碳核查 三、配电运营 总 结: 从业界实际情况来看,流程建设本身是一个对业务现实进行抽象的过程,这个过程即使不考虑软件开发的门槛,对于很多客户而言也是个涉及较长周期的复杂工作,往往需要咨询专家或专业公司帮助其建设内…

【Python】函数式编程例子

知识目录 一、写在前面&#x1f37a;二、七段数码管显示倒计时✨三、斐波那契序列&#x1f37a;四、总结撒花&#x1f60a; 一、写在前面&#x1f37a; 大家好&#xff01;我是初心&#xff0c;今天我们回到了Python从入门到精通。 今天跟大家分享的文章是 Python中函数的使用…

sentinel原理分析及源码剖析

sentinel功能 sentinel功能可参考官网 可以从sentinel的dashboard中了解到sentinel的核心功能包括 流控规则 阈值类型&#xff1a;QPS、并发线程数流控模式&#xff1a;直接&#xff0c;关联&#xff0c;链路流控效果&#xff1a;快速失败&#xff08;滑动时间窗算法Default…

分享Python采集99个焦点图,总有一款适合您

分享Python采集99个焦点图&#xff0c;总有一款适合您 Python采集的99个焦点图下载链接&#xff1a;https://pan.baidu.com/s/1887LXr2ovCAw-Bp7PuM66g?pwdbyx4 提取码&#xff1a;byx4 原创Jquery焦点图片切换效果 自定义大小&#xff0c;使用方 jquery立体式缩略图焦点图…

Linux系统之编译安装python3

Linux系统之编译安装python3 一、python3介绍1. python3简介2. python3特点 二、检查本地环境1. 检查本地操作系统版本2. 检查内核版本3. 检查当前python版本 三、安装前准备工作四、下载python最新版本源码包1. 访问python官网2. 创建下载目录3. 下载python源码包4. 解压pytho…

Git业务实践记录

您好&#xff0c;如果喜欢我的文章&#xff0c;可以关注我的公众号「量子前端」&#xff0c;将不定期关注推送前端好文~ 场景描述 最近在开发一个新的功能&#xff0c;和往常一样先建了一个分支进行开发&#xff0c;开发到周期60%的时候&#xff0c;后端临时通知需要将大功能…

思维导图到底有多少种?

思维导图是一种非常实用的工具&#xff0c;它可以帮助我们更好地组织和表达我们的思想。在日常生活和工作中&#xff0c;我们可以使用各种不同类型的思维导图来解决不同的问题。下面&#xff0c;我将介绍一些常见的思维导图类型以及如何使用ProcessOn思维导图软件制作思维导图。…

前端学习--Vue(5)

一、动态组件 动态切换组件的显示与隐藏 1.1 <component>组件 <!-- component是vue内置的标签占位符 is中规定标签名 --><component :is"comName"></component> 动态组件在被展示的时候被创建&#xff0c;隐藏的时候被销毁 如果想要组件…

Day1:Windows消息循环机制

先区分几个概念 系统&#xff1a;特指Windwos操作系统 应用程序&#xff1a;指一个程序&#xff0c;比如QQ&#xff0c;微信等 窗口&#xff1a;每个应用程序都 可以拥有窗口&#xff0c;而且可以有多个&#xff0c;但一般会有一个主窗口。 消息&#xff1a;window系统定义…

【系统集成项目管理工程师】计算题专题二

七、进度网络计算题 1、单代号网络图 六标时图 正推取大&#xff08;红色&#xff09;&#xff1b;反推取小&#xff08;绿色&#xff09; 关键路径&#xff1a;ACDE&#xff08;关键路径下的活动总浮动时间都是 0&#xff09; 浮动时间&#xff08;总时长&#xff09;&…

《Spring Guides系列学习》guide31 - guide34 及中期简单回顾

要想全面快速学习Spring的内容&#xff0c;最好的方法肯定是先去Spring官网去查阅文档&#xff0c;在Spring官网中找到了适合新手了解的官网Guides&#xff0c;一共68篇&#xff0c;打算全部过一遍&#xff0c;能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

Scrum敏捷迭代规划和执行

Sprint Backlog看板 迭代工作的开展是围绕Sprint Backlog展开的&#xff0c;在Leangoo中&#xff0c;我们需要为每个迭代创建一个Sprint Backlog看板。Sprint Backlog&#xff08;迭代&#xff09;看板&#xff0c;用于管理当前Sprint的需求和开发任务&#xff0c;可视化展示每…