构造函数

c++的构造函数极其调用(无参构造函数,有参构造函数,拷贝构造函数) 1.c++编译器会自动调用构造函数//构造函数(与类名相同) //析构函数:没有参数也没有任何返回类型,被自动调用 #include<iostream> using namespace std; class Test { public: Test();//无参构造函数 ~Test();//析构函数:先创建的对象后释放 void print() { cout <<... 阅读详情

  构造函数和析构函数是两个非常特殊的函数:它们没有返回值。这与返回值为void的函数显然不同,后者虽然也不返回任何值,但还可以让它做点别的事情,而构造函数和析构函数则不允许。在程序中创建和消除一个对象的行为非常特殊,就像出生和死亡,而且总是由编译器来调用这些函数以确保它们被执行。如果它们有返回值,要么编译器必须知道如何处理返回值,要么就只能由客户程序员自己来显式的调用构造函数与析构函数,这样一来,安全性就被人破坏了。另外,析构函数不带任何参数,因为析构不需任何选项。

一 析构函数:

语法 :~classname()

特点:

1)无任何类型的返回值

2)无参数

调用机制:在对象被销毁时自动调用

~Struct_func(void)

	{
		cout << "我是析构函数" << endl;
	}


   二 构造函数

特点 :1)方法名与类名相同

2 可以有参数,但不可以有返回值


1 )无参构造函数

默认构造函数是没有参数的构造函数

class Struct_func{
public:
	Struct_func()
	{

		cout << "无参构造函数" << endl;
	}
	~Struct_func(void)

	{
		cout << "我是析构函数" << endl;
	}
};
void displayStructFunc(void)
{
	Struct_func t1;
}
int main()
{
	/*这里并未显示的调用构造函数,但只是构建一个其对象,会输出:无参构造函数  我是析构函数 */
	displayStructFunc();
	system("pause");
	return 0;
}
2 有参构造函数的二种初始化方式

初始化方式案例:

a1 :用括号法初始化

a2 :显示的调用成员函数初始化

class Struct_func{
public:
	Struct_func(int ma,int mb)
	{
		a = ma;
		b = mb;
		cout << "有参构造函数" << endl;
	}
	~Struct_func(void)

	{
		cout << "我是析构函数" << endl;
	}
	Struct_func(int ma)
	{
	
	}
public:
	void print(void)
	{
		cout << "a=:" << a << "  b=:" << b;
	}

private:
	int a;
	int b;
};

int main()
{
#if 0
	/*方法 1*/
	Struct_func t1(1, 2);
	t1.print();
#endif
	/*方法2显示的调用构造函数*/
	Struct_func t2 = Struct_func(9, 0);
	t2.print();
	system("pause");
	return 0;
}
方式2可以衍生为
Struct_func t1 (9, 0);
Struct_func t2 =t1;/*在默认情况下将同一个对象赋值给里一个同类型的对象时,c++将每一个原对象的数据成员内容复制到目标对象对应的数据成员中*/


2 拷贝构造函数的初始化(4中初始化方式)

1)用对对象初始化对象

class Struct_func{
public:
	Struct_func(Struct_func &obj)
	{
		a = obj.a+100;
		b = obj.b+1000;
		cout << "有参构造函数" << endl;
	}
	Struct_func(int _a,int _b)
	{
		a = _a;
		b = _b;
		cout << "有参构造函数" << endl;
	}
	~Struct_func(void)

	{
		cout << "我是析构函数" << endl;
	}	
public:
	void print(void)
	{
		cout << "a=:" << a << "  b=:" << b;
	}
private:
	int a;
	int b;
};
int main()
{
	Struct_func t2(9, 0);
	Struct_func t3(9, 10);
	
	
	/*初始化方式1*/
	Struct_func t1 = t2;//用t2初始化t1,只是将t1的值传递给t2,在执行t2对象时t2对象会根据自己的代码对数据加工
	t1.print();

#if 0
	
	 t1 = t3(5,6);/*注意:在这个过程中,有的C++编译器会产生一个临时变量用于接收t3传过来的值,然后将该临时变量的值赋值给t1,但是在该临时变量
被销毁时也会调用一次析构函数*/
	t1 = t2;/*注意这种情况是将t2中的数据复制一份给t1,输出结果t1与t2的值完全相同的*/
#endif
	t1.print();

	system("pause");
	return 0;
}

Struct_func t1 = t2;直接用t2初始化t1;
2)用一个已经初始化的对象作为参数传递到另一个对象
class Struct_func{
public:
	Struct_func(Struct_func &obj)
	{
		a = obj.a+100;
		b = obj.b+1000;
		cout << "有参构造函数" << endl;
	}
	Struct_func(int _a,int _b)
	{
		a = _a;
		b = _b;
		cout << "有参构造函数" << endl;
	}
	~Struct_func(void)

	{
		cout << "我是析构函数" << endl;
	}	
public:
	void print(void)
	{
		cout << "a=:" << a << "  b=:" << b;
	}
private:
	int a;
	int b;
};
int main()
{
	Struct_func t2(9, 0);
	Struct_func t3(9, 10);
	
	/*初始化方式2*/
	Struct_func t1(t2);
#if 0
	
	Struct_func t1 = t2;
	t1 = t2;/*注意这种情况是将t2中的数据复制一份给t1,输出结果t1与t2的值完全相同的*/
#endif
	t1.print();

	system("pause");
	return 0;
}




Struct_func t1(t2);将t2以参数的形式传入到t1;
注意  t1 = t2;这种复制操作是不会调用拷贝构造函数的
3)在做参数传递的时候调用拷贝构造函数

4)在返回一个对象是调用拷贝构造函数并创建匿名对象

class Struct_func{
public:
	Struct_func(Struct_func &obj)
	{
		a = obj.a+100;
		b = obj.b+1000;
		
		cout << "拷贝构造函数" << endl;
	}
	Struct_func(int _a,int _b)
	{
		a = _a;
		b = _b;
		cout << "有参构造函数" << endl;
	}
	~Struct_func(void)

	{
		cout << "我是析构函数" << endl;
	}	
	int Get_A(void)
	{
		return a;
	}
public:
	void print(void)
	{
		cout << "a=:" << a << "  b=:" << b;
	}
private:
	int a;
	int b;
};
Struct_func constructor()
{
	Struct_func oppa(10, 9);//初始化有参构造函数并调用有参构造函数
	return oppa;//创建一个匿名对象并且执行拷贝构造函数,在本程序退出时自动销毁,所以在本程序中会
	//一次调用有参构造函数一次调用拷贝构造函数,在函数推出时会调用一次析构函数析构oppa对象,调用一次析构函数
	//析构匿名对象
}
void disp()
{
	constructor();
}
int main()
{	
	disp();
	system("pause");
	return 0;
}


可以参考博客地址:http://blog.chinaunix.net/uid-28977986-id-3977861.html










        
linux系统中C++中构造与析构函数以及this的使用方法 大家好,今天主要和大家聊一聊,C++里面的基本语法结构以及对应的操作方法。 阅读详情

相关推荐

MATLAB自动驾驶(1)——预构建场景库

MATLAB自动驾驶(1)——预构建场景库

Ucicorn Gundam的博客 3268

构造函数调用几次

原文地址: http://zhidao.baidu.com/question/361788173.html&__bd_tkn__=6bba5b0d2c2c951d541ae36eb9b82ff4c71381ad8078338d51fed8133ea5c69d362ad36bb4bcda3b39bb3949f6bbe47087ac3af56e60b1f4e7eb60157b5afc35956fa8

WUYUAN2011WOAINI的专栏 8961

MinIO vs 华为云OBS:成本、性能与兼容性深度对比(含实测数据)

本文深度对比了开源对象存储MinIO与华为云OBS在成本、性能、兼容性及运维方面的核心差异。通过实测数据与全生命周期成本分析,为技术决策者提供选型依据。文章指出,MinIO在长期成本控制、性能深度优化及S3 API兼容性方面优势显著,而华为云OBS则提供开箱即用的便利性。

kmeans3miner的博客 596

构造函数和析构函数

构造函数和析构函数

liyiran_的博客 181

开源光标主题实战:从Moshi Monsters到自定义指针的完整指南

光标主题是操作系统个性化的重要组成部分,它通过替换系统默认指针图标来改变视觉交互体验。其原理在于操作系统允许用户自定义指针资源文件,这些文件定义了不同状态下的光标图像。从技术价值看,一套设计良好的光标主题不仅能提升桌面美观度,还能增强用户的情感连接和操作愉悦感,是低成本高回报的数字幸福感提升方案。在应用场景上,无论是开发者、设计师还是普通用户,都可以通过更换光标主题来个性化工作环境。本文以热门的Moshi Monsters开源光标项目为例,深入解析了光标主题的设计逻辑、系统适配方案以及二次创作方法,涵盖了W

weixin_30879833的博客 578

手把手教你利用qemu搭建银河麒麟V11 arm环境

在Windows环境下,初学者或企业用户常通过VMware、VirtualBox等虚拟机软件安装Ubuntu、Red Hat等Linux系统,这类工具更侧重X86等复杂指令集架构(CISC,常见于Intel、AMD处理器)的虚拟化。而QEMU是一款开源的虚拟机监视器与模拟器,核心优势在于可模拟ARM、MIPS、RISC-V等精简指令集架构(RISC)的处理器并提供虚拟化能力,更适合对虚拟化技术有一定了解的用户。可能是电脑性能问题,安装过程比较慢,需要耐心等待。等操作系统下载完成后,进行安装了。

huanhuanzhou blog 2457

【Linux基础】构造函数与析构函数

构造函数:对对象进行初始化。 析构函数:在对象销毁时进行内存释放等清理工作。 构造函数 1. 构造函数的特点 (1) 构造函数的函数名与类名相同。 (2) 不能定义构造函数的类型(即不能指明构造函数返回值的类型)。 (3) 构造函数应声明为公有函数。 (4) 构造函数不能在程序中调用,在对象创建时,构造函数被系统自动调用。 2. 构造函数的作用 构造函数的作用就是在对象被

u010926630的专栏 924

抖音无水印视频爬虫实战:从抓包分析到批量下载指定用户作品

抖音作为当前最受欢迎的短视频平台,拥有海量的优质内容。很多用户希望备份自己或他人的作品,但抖音官方并未提供批量下载功能,且直接下载的视频带有平台水印。本文将带领大家从零开始,通过抓包分析、设备模拟、请求签名等核心技术,实现一个完整的抖音无水印视频爬虫系统。本文仅供技术学习和个人备份使用,请勿将爬取的内容用于商业用途或侵犯他人版权,爬取频率请控制合理范围内。目录一、前言二、技术栈概览三、准备工作3.1 环境搭建3.2 抓包分析步骤3.3 关键API发现四、核心技术解密4.1 X-Gorgon签名算法。

2201_76125261的博客 846

Linux C中类似C++的构造函数constructor

Linux C中类似C++的构造函数constructor

ainiyiwannianyu的博客 487

mapbox进阶,dem数据转为等高面,加载转换后的等高面到地图

本文详细介绍如何基于mapbox-gl v3.*.* 版本,使用dem数据转为等高面,加载转换后的等高面到地图,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 407

openclaw中文版安装教程和常用命令

OpenClaw 中文版的和,涵盖本地一键部署、Docker 隔离部署、阿里云极速部署三种方式,以及六大类高频命令,方便你快速上手和日常运维。

suny8的专栏 3001

默认构造函数和构造函数重载

本文主要总结了默认构造函数的相关用法和构造函数重载,旨在能够对平时的项目开发起到一定的夯实基本功的作用,言简意赅,一目了然。首先需要了解构造函数是用来做什么?该类对象被创建时,编译器为对象分配内存空间,并自动调用该构造函数,由构造函数完成数据成员的初始化工作。一、默认构造函数 从代码层面进行分析 class testClass { public : testClass();//不带参数的默认

syeming的编程专栏 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【C++】构造函数调用规则 ( 默认构造函数 | 默认无参构造函数 | 默认拷贝构造函数 | 构造函数调用规则说明 )

一、默认构造函数 1、默认无参构造函数 2、默认拷贝构造函数 二、构造函数调用规则 1、构造函数规则说明 2、代码示例 - 只定义拷贝构造函数 3、代码示例 - 只定义有参构造函数

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 6483

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++:构造函数与重载构造函数

本文主要总结了默认构造函数的相关用法和构造函数重载,旨在能够对平时的项目开发起到一定的夯实基本功的作用,言简意赅,一目了然。 一、构造函数的定义 构造函数是用来做什么?就是该类对象被创建时,编译器为对象分配内存空间,并自动调用该构造函数,由构造函数完成数据成员的初始化工作。 二、构造函数的分类 构造函数分为默认构造函数和重载构造函数。默认构造函数分为两类 1.默认构造函数 1)定义一个无参数的默认构造函数; 2)定义所有参数都有默认值的默认构造函数 2.重载构造函数 在一个类中可以定义多个构造函数,以便提

Warddamn的博客 8065

C#构造函数

私有构造函数是一种特殊的实例构造函数,通常只包含静态成员的类中。当使用new关键字创建类的对象时,可以使用实例构造函数来初始化和创建类中的任意成员属性。静态构造函数用于初始化类中的静态数据或执行仅需一次的特定操作,静态构造函数将在创建第一个实例或引用类中的静态成员之前自动调用。在C#中,构造函数就是与类具有相同名称的成员函数,通常使用类中的构造函数来初始化类的成员属性。,程序就会出错,因为 Student 类的构造函数是私有静态函数,受其保护级别的。.静态构造函数会在实力构造函数之前运行;

Zhuxxxxx的博客 1万+

C++关于默认构造函数和无参构造函数

C++关于默认构造函数和无参构造函数 默认构造函数 在不提供任何构造函数的情况下,编译器给出一个不带参数的,不包含代码的构造函数。 #include<iostream> using namespace std; class A { public: int val; }; int main(){ A a; //这里调用的是默认构造函数 cout<<a.val<<endl; return 0; } 当已经提供了显式的构造函数,例如:

qq_38600065的博客 8825

C++所有类型的构造函数详解(默认构造函数、一般构造函数、拷贝构造函数、移动构造函数、类型转换构造函数、委托构造函数)

文章摘要:本文系统介绍了C++中的构造函数机制,包括6种主要类型:1)默认构造函数用于无参初始化;2)一般构造函数实现参数化初始化;3)拷贝构造函数处理对象复制(区分浅/深拷贝);4)移动构造函数(C++11)实现高效资源转移;5)类型转换构造函数支持隐式/显式类型转换;6)委托构造函数实现代码复用。每种构造函数详细说明了定义语法、特性及调用时机,并通过String类的完整示例演示了实际应用场景。文章特别强调了构造函数在对象生命周期管理中的核心作用,以及如何通过不同构造函数实现对象初始化、资源管理和类型转换

m0_53601985的博客 1615

C++ 构造函数

本文系统介绍了C++中各类构造函数的特点与用法。主要内容包括:默认构造函数(无参)、带参构造函数(支持重载和初始化列表)、拷贝构造函数(处理对象复制)、移动构造函数(C++11引入,优化资源转移)、委托构造函数(减少代码重复)以及显式构造函数(防止隐式转换)

平平无奇的小甜菜 1380

C++的构造函数

博主个人认为构造函数就是创建对象时 对即将创建的对象进行预处理的函数。这个预处理一般是给对象的成员进行赋值。自定义的默认构造函数就是无参的构造函数如图2_1所示。图2_1自定义默认构造函数有自定义的默认构造函数时,合成的默认构造函数就不会使用。自定义拷贝构造函数的声明如图4_1所示。图4_1自定义拷贝构造函数的定义如图4_2所示。图4_2在自定义拷贝构造函数中,面对指针类型的成员我们是可以设计深拷贝的逻辑的当然,针对有指针类型的类设计拷贝构造函数时,设计深拷贝逻辑是非常有必要的,

m0_61756911的博客 1910

C++构造函数之默认构造函数

参考博客:https://blog.youkuaiyun.com/china_jeffery/article/details/79288103#commentBox 以下内容是在上述博主的博客中提炼出来的: 一、默认构造函数的含义是啥: 主要就是:默认构造函数在调用的时候不需要显示传入实参的构造函数 二、默认的构造函数的分类 1、无参构造函数:就是没有参数的构造函数 class Sample ...

Littlehero_121的博客 3234

构造函数(一) 构造函数及重载

什么是构造函数 构造函数是初始化类对象的类成员函数。在c++中,当对象被创建时,自动调用构造函数,构造函数是该类的一个特殊成员的函数 构造函数和一般的成员函数有什么不同 构造函数的名称和类的名称完全相同 构造函数没有返回类型(包括void) 创建对象的时候自动调用构造函数 如果我们不写构造函数,编译器会自动创建一个没有参数的构造函数,函数主体内什么也没有(默认构造函数) 函数体中不能有...

2642

Kotlin 主构造函数与次构造函数的理解

遇到了Kotlin: Primary constructor call expected的报错 如果类有一个主构造函数,每个次构造函数需要委托给主构造函数, 可以直接委托或者通过别的次构造函数间接委托。委托到同一个类的另一个构造函数用this关键字即可 这句话就是说如果一个类有主构造函数,只要他还有次构造函数就必须调用主构造函数,方式可以不同 方式1:每个次构造函数都调用主构造函数 class Parent(name: String) { var age = 0; va...

本人很懒 5343

c++ 类的构造函数及子类的构造函数

类在创建的时候需要调用构造函数,假如对系统没有任何说明,则会调用系统默认的构造函数,在需要自行写构造函数的时候往往是一下几种情况: 1.构造函数中不带参数: #include<iostream> using namespace std; class Student{ public: void setID(int ID); int getID...

wybnmsl的博客 1930

什么是构造函数

构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员对象。 构造函数的特点: 构造函数必须与类的名字相同,并且不能有返回值(返回值也不能为void)。 每个类可以有多个构造函数。当开发人员没有提供构造函数时,编译器在把源代码编译成字节码的过程中会提供一个没有参数默认的构造函数,但该构造函数不会执行任何代码。如果开发人员提供了构造函数,那么编译器就不会在创建默认的构造函数了。 构造函数可以...

君子为猿的博客 1万+
上一篇: 面向对象的编程练习
下一篇: 浅拷贝与深度拷贝
LiBin1103
博客等级 码龄9年 38粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值