构造函数

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++里面的基本语法结构以及对应的操作方法。 阅读详情

相关推荐

BurpSuite实战:5分钟搞定Pikachu靶场表单爆破(附最新字典配置技巧)

本文通过Pikachu靶场实战,详细演示了如何使用BurpSuite的Intruder模块对Web登录表单进行暴力破解。从代理配置、请求捕获、集束炸弹模式设置,到载荷配置与结果分析,提供了完整的操作流程。文中还分享了2024年有效的字典获取与优化技巧,帮助安全测试人员快速定位弱口令漏洞。

weixin_29327977的博客 601

构造函数调用几次

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

WUYUAN2011WOAINI的专栏 8961

触摸屏蓝牙控制

使用杰理芯片通过蓝牙实现触摸屏功能,需要结合触摸屏数据采集、蓝牙数据传输以及移动端应用的实现。

m0_46145044的博客 1109

构造函数和析构函数

构造函数和析构函数

liyiran_的博客 181

redhawk-sc使用简介

数据完整性对结果的准确性有很大影响,所以一定要保证数据完整性,Redhawk-sc在跑完后,Report里有Data Integrity界面,在这个界面会看到设计数据和库文件的数据完整性,在相应的报告中会有没有覆盖到的数据情况,要对每一项仔细检查,保证输入数据没有问题。文件一般加密,用户唯一需要选择的是文件的corner。其中,cell lef除了常规的standard cell,还有如DTCD,BTSV和clamp等cell的lef,不可缺失,否则data integrity将不是100%。

weixin_48518726的博客 3154

人工智能情感分析实战:文本情绪识别

人工智能情感分析,特别是文本情绪识别,已成为理解和处理人类情感信息的重要工具。通过数据预处理、特征提取、模型训练与评估等步骤,我们可以有效地从文本数据中提取情感信息,为各种应用场景提供有价值的洞察。随着技术的不断进步和创新,情感分析的应用前景将更加广阔,为我们的生活和工作带来更多便利和机遇。

shejizuopin的博客 1098

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

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

u010926630的专栏 924

用电脑通过网口控制keysight示波器

Keysight HD304MSO示波器提供1GHz带宽、14位高精度ADC及10.1英寸触控屏,支持50μV低噪声信号捕获和1.3M波形/秒刷新率。配备4通道探头、逻辑分析仪接口及100Mpts存储深度,含故障诊断、FFT等高级功能。通过网线连接电脑安装TightVNC软件(示波器IP为169.254.163.24)可实现远程控制,相比U盘传输更高效。(149字)

johnboat的专栏 1136

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

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

ainiyiwannianyu的博客 487

星载SAR的各项指标解读(史上最全)

一、系统指标 系统指标主要指雷达系统的通用的指标,以及和卫星整星相关的指标,主要有一下几项: 工作频段: 雷达体制: 极化方式: 设计s

9276

微信小程序 - 实现Java微信支付退款功能以及退款流程,微信小程序前端+java后端完整示例源码,微信小程序退款功能详解,小程序订单申请退款和退款回调方法、查询退款等(新版微信支付,详细示例代码)

微信小程序开发-微信支付退款功能以及退款回调方法,微信支付退款API详解,微信小程序支付V3(支付、退款)Java实现微信小程序开发 小程序支付开发-小程序退款功能,微信小程序小程序和公众号 退款功能教程(含申请退款和退款回调,退款回调地址在商户后台配置或者代码自定义)最新版微信小程序支付,退款问题,小程序支付和退款功能详解,小程序申请退款,小程序处理退款,微信小程序支付与退款java,微信小程序退款及回调,JAVA实现微信小程序支付退款功能,退款api调用报错,如何解决退款申请无响应,如何用实现小程序订单

🏆 前端领域优质创作者 4159

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

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

syeming的编程专栏 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

Warddamn的博客 8065

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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、付费专栏及课程。

余额充值