类与对象(类的默认六个成员函数)

【C++】类与对象——类的六个默认成员函数 文章目录一、构造函数1.概念2.特征编译器生成的默认成员函数的意义3.成员变量的命名风格4.构造函数体赋值5.初始化列表5.1 格式5.2 注意事项5.3初始化顺序6.explicit关键字析构函数1.概念2.特征拷贝构造函数 类中有六个默认成员函数,即使一个成员都没有,空类中也不是空白的,任何一个类在我们不写的情况下都会默认生成6个成员函数 下面一一介绍 一、构造函数 1.概念 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对 阅读详情

前言

如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。下面我们就来学习了解这些成员函数

一、构造函数

1.概念

下面我定义一个常见的日期类

class Date
{
public:
	Date(int year, int month, int day)//构造函数
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year;
	int _month;
	int _day;
};

构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。

2.特性

其特征如下:
1.函数名与类名相同
2.无返回值
3.对象实例化时编译器自动调用
4.构造函数可以重载
如:

class Date
{
public:
	Date()//不带参的构造函数
	{
	}
	Date(int year, int month, int day)//带参数的构造函数
	{
		_year = year;
		_month = month;
		_day = day;
	}
	//Date(int year =1, int month=1, int day=1)//带参数的构造函数,可以缺省
	//{
	//	_year = year;
	//	_month = month;
	//	_day = day;
	//}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date a;//调用无参数构造函数
	Date b(1, 2, 3);//调用带参构造函数
}

5.如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成。
6. 无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。注意:无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认成员函数。
7.编译器自己生成的默认函数在被调用时,对内置类型(int,double等)不做处理,对于自定义类型则会调用它的默认构造函数。
结论:
在大多数情况下我们都要自己写构造函数,一般只有少数情况可以让编译器默认生成。
列如:
1.类里的成员都是自定义成员,并且都要默认构造函数
2.如果还有内置类型成员,声明时给了缺省值

二、析构函数

1.概念

我们知道一个对象是如何初始化的,那它又是如何销毁的呢,析构函数:与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成类的一些资源清理工作。

2.特性

1.析构函数名是类名前面加上~
2.无返回值
3.一个类且有只有一个析构函数
4.对象销毁时,自动调用析构函数

class Date
{
public:
 //默认生成的析构函数,内置类型成员不做处理,自定义类型成员会去调用它的析构函数
	~Date()//析构函数,析构函数不能重载
	{
		;
	}
private:
	int _year;
	int _month;
	int _day;
};

5.编译自带的默认析构函数,会调用自定义类型的析构函数

3.拷贝构造函数

1.概念

构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。

2.特征

1.拷贝构造函数是构造函数的重载形式

class Date
{
public:
	
	Date(int year = 1, int month = 1, int day = 1 )//带参数的构造函数
	{
		_year = year;
		_month = month;
		_day = day;
	}
	~Date()//析构函数
	{
		;
	}
	Date(const Date& d)//拷贝构造函数
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}
private:
	int _year;
	int _month;
	int _day;
};

2.拷贝构造的参数只有一个且必须使用引用传参,使用引用传参会引起无穷递归调用
在这里插入图片描述3.编译器自动生成的默认拷贝构造函数,对内置类型浅拷贝,对自定义类型成员会调用它的拷贝构造
结论:一般的类,自己生成拷贝构造就够用了。只有像Stack这样类,自己直接管理资源,需要自己写拷贝构造

4.运算符重载

1.运算符重载

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。
函数名字为:关键字operator后面接需要重载的运算符符号。
函数原型:返回值类型 operator操作符(参数列表)
注意:
1.不能通过连接其他符号来创建新的操作符:比如operator@
2.重载操作符必须有一个类类型或者枚举类型的操作数
3.用于内置类型的操作符,其含义不能改变,例如:内置的整型+,不 能改变其含义
4.作为类成员的重载函数时,其形参看起来比操作数数目少1成员函数的操作符有一个默认的形参this,限定为第一个形参
5。 .* 、:: 、sizeof 、?: 、. 注意以上5个运算符不能重载。

class Date
{
	friend bool  operator==(const Date & d1, const Date & d2);//友元函数
public:
	
	Date(int year = 1, int month = 1, int day = 1 )//带参数的构造函数
	{
		_year = year;
		_month = month;
		_day = day;
	}
	~Date()//析构函数
	{
		;
	}
	Date(const Date& d)//拷贝构造函数
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}
	
private:
	int _year;
	int _month;
	int _day;
};
bool operator==(const Date& d1, const Date& d2)//定义在全局的operator==
{
	return d1._year == d2._year
	&& d1._month == d2._month
		&& d1._day == d2._day;
}
int main()
{
	Date a(1,1,3);//调用无参数构造函数
	Date b(1, 2, 3);//调用带参构造函数
	if (a == b)
	{
		cout << "相同" << endl;
	}
	else
	{
		cout << "不同" << endl;
	}

}

2.赋值运算符重载

Date& operator=(const Date& d)
	{
		if (this != &d)
		{
			_year = d._year;
			_month = d._month;
			_day = d._day;
		}
	}
  1. 参数类型
  2. 返回值
  3. 检测是否自己给自己赋值
  4. 返回*this
  5. 一个类如果没有显式定义赋值运算符重载,编译器也会生成一个,完成对象按字节序的值拷贝。
class Date
{
	friend bool  operator==(const Date & d1, const Date & d2);
public:
	
	Date(int year = 1, int month = 1, int day = 1 )//带参数的构造函数
	{
		_year = year;
		_month = month;
		_day = day;
	}
	~Date()//析构函数
	{
		;
	}
	Date(const Date& d)//拷贝构造函数
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}
	Date& operator=(const Date& d)
	{
		if (this != &d)
		{
			_year = d._year;
			_month = d._month;
			_day = d._day;
		}
	}
	
private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	Date a(1,1,3);//调用无参数构造函数
	Date b(1, 2, 3);//调用带参构造函数
	a = b;// 这里d1调用的编译器生成operator=完成拷贝,d2和d1的值也是一样的。

}

5.取地址及const取地址操作符重载

这两个默认成员函数一般不用重新定义 ,编译器默认会生成。

class Date
{
public :
Date* operator&()
{
return this ;
}
const Date* operator&()const
{
return this ;
}
private :
int _year ; // 年
int _month ; // 月
int _day ; // 日
};

这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比如想让别人获取到指定的内容!

总结

以上就是关于类的默认六大成员函数的全部内容,希望对大家有所帮助,感谢观看!

macOS安装Cplex+yalmip 阅读详情

相关推荐

深入Android构建系统:一次修改ro.vendor.build.fingerprint失败的排查与解决记录

本文深入探讨了Android构建系统中修改ro.vendor.build.fingerprint的完整解决方案。通过分析vendor分区的特殊地位和构建指纹的生成路径,提供了三种实战修改方法,并揭示了指纹修改可能遇到的陷阱与对策,帮助开发者彻底解决这一常见问题。

weixin_30621711的博客 141

c++类和对象(中)

类的6个默认成员函数 构造函数 析构函数 拷贝构构造函数 赋值操作符重载 默认拷贝构造与赋值运算重载的问题 const成员函数 取地址及const取地址操作符重载 1.类的6个默认成员函数 2.构造函数 2.1概念 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员 都有 一个合适的初始值,并且在对象的生命周期内只调用一次 2.2特性 函...

A_supi的博客 509

ADAS系统架构与核心功能解析:从感知到执行的智能驾驶方案

高级驾驶员辅助系统(ADAS)是现代汽车智能化的核心技术,其本质是通过传感器融合、算法决策与车辆控制,构建一个“感知-决策-执行”的闭环系统。在技术原理上,ADAS依赖摄像头、毫米波雷达、激光雷达等多源传感器进行环境感知,并通过深度学习模型与融合算法(如卡尔曼滤波)构建精准的环境模型。其技术价值在于提供主动安全冗余与驾驶舒适性,核心应用场景包括自动紧急制动(AEB)、自适应巡航(ACC)及车道保持辅助(LKA)等。随着传感器成本下降与域控制器算力提升,ADAS正从高端配置向主流车型快速普及,并逐步向高阶导航

weixin_31062533的博客 417

java--第六章 类与对象

第六章 类与对象 判断题 用static修饰的变量是类变量。(T) static修饰的成员变量又称为类变量。不加static修饰的成员变量又叫对象变量。对象变量依附于具体的对象实例,它的值因具体对象实例的不同而不同,而类变量为该类的所有对象共享,它的值不因类的对象不同而不同。 如果使用import语句引入了整个包中的类,那么可能会增加编译时间。但绝对不会影响程序运行的性能,因为当程序执行时,只是将真正使用的类的字节码文件加载到内存。(T) 2.在Java程序中,可以使用protected来修饰一个类。

qq_48566899的博客 4269

RLHF的数学表示

RLHF(Reinforcement Learning with Human Feedback)是一种结合了强化学习和人类反馈的机器学习方法。它通常用于训练智能体(agent)在复杂环境中做出决策,同时利用人类的反馈来指导和改进学习过程。RLHF 没有一个统一的数学表示式,因为它依赖于具体的应用场景和实现细节。然而,我们可以从强化学习和人类反馈的角度来描述RLHF的一些关键数学概念。

xw555666的博客 687

Labview项目01:标准可配置序列测试框架

摘要:本文介绍了一个基于LabVIEW2020开发的通用测试框架系统。该系统采用模块化设计,包含主界面、调试界面、设置界面和登录界面。主功能包括:1)可配置测试序列,支持延时、预定值输出、随机值输出等操作;2)单步测试功能自主添加;3)界面支持测试序列编辑和权限管理。系统采用队列机制处理事件和测试流程,通过CSV文件存储测试序列,支持参数化配置。用户可自定义测试VI(A_.vi和N_.vi格式),并通过调试界面验证测试序列。最终测试结果在主界面显示,提供整体判断功能。该系统既可作为学习参考,也可用于实际测试

weixin_38637405的博客 1552

【Java PTA作业】当老师一口气布置八个作业( 8 / 8 )

java八个作业我写完啦 快放假叭 锦鲤保佑java期末考试顺顺利利呜呜

weixin_61639349的博客 5159

17|CI/CD 集成与质量门禁:让精准测试进入发布流水线

本文讲解精准测试如何接入 CI/CD 流水线,并通过质量门禁辅助发布决策。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 66

C++中~的使用简介

主要有两个作用: 1 按位取反操作 用于数字或整型量之前,表示把操作数按照二进制的每一位值取反,其规则是~0=1, ~1=0, 如二进制0101 0101取反后就是1010 1010 2 声明类的析构函数 用在类中的析构函数之前,表示该函数是析构函数 1 析构函数简介 简单讲,类的析构函数是类的一个成员函数,名字由波浪号加类名构成,执行与构造函数相反的操作:释放对象使用的资源,并销毁非static...

DarkUniX的博客 8989

【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏5(附项目源码,完结)

本期是本项目的最后一篇,主要内容是配置环境、生成不同敌人、结束重开。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2575

免ROOT、不刷机、不依赖Xposed实现Android改机的思路

最近在一个项目中需要模拟多种Android设备的环境。无奈市面上的大部分改机工具,要么需要ROOT权限,要么依赖Xposed,甚至还得重启设备。为了实现更灵活、更干净的改机方式,我开始了漫长的技术探索,最终找到了免ROOT、不刷机、拒绝Xposed的实现路径。Android_IDIMEI手机序列号手机型号、品牌、CPU型号等硬件信息GPS位置、Wi-Fi参数、通话记录、短信等软硬件数据这些信息通常用于标识设备唯一性,而改机就是对这些标识数据进行模拟或篡改。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2668

c++ 中. 和 ->,波浪号 ~ 符号怎么用

1、 用在类中的析构函数之前,表示该函数是析构函数。如类A的析构函数 classA { //... ~A(){}//析构函数 }; 2、 用于数字或者整形变量之前,表示对该数取反操作,其规则是~0=1, ~1=0, 如二进制0101 0101取反后就是1010 1010 C++之类的析构函数 简单说说类的析构函数,它是类的一个成员函数,名字由波...

ditigao0965的博客 2440

强化学习与行为树的融合在游戏编程中的应用

在游戏中,我们可以将游戏的状态作为智能体的状态,将游戏的奖励作为强化学习中的奖励信号,从而训练智能体在游戏中做出最佳决策。强化学习通过试错学习来优化角色的决策策略,而行为树提供了一种灵活的方式来组合和调整不同的行为。行为树可以灵活地调整和组合不同的行为,以适应游戏中不同的情境和目标。在游戏开发中,强化学习和行为树是两种常见的技术,它们被广泛应用于游戏智能的实现。接下来,我们可以定义一个具体的行为树(BehaviorTree),该行为树由一系列节点组成,每个节点代表一个特定的行为或决策。

TechO_O的博客 681

【C++】类和对象的六个默认成员函数

类和对象的六个默认成员函数

m0_52347974的博客 948

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

类与对象(中) 详细讲解类的六个默认成员函数,认真看一定会有收获

目录前言一、类的六个默认成员函数二、构造函数1.概念2.特性三、析构函数1.概念2.特征四、拷贝构造函数1.概念2.特征五、赋值运算符重载1.运算符重载概念2.实现赋值运算符重载六、const修饰类的成员函数七、取地址及const取地址操作符重载总结前言哈喽,大家好,相信看了我上一篇博客的小伙伴已经对类和对象有了一些初步认识,今天我将着重介绍类里面的默认成员函数,希望想要了解的小伙伴不要走开哦。一、类的六个默认成员函数如果一个类里面什么成员都没有,我们一般会把它简称为空类。但空类里真的什么都没有吗?当然不是

weixin_59371851的博客 1877

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++类与对象(二)-- 类的六个默认的成员函数【万字大章!!!!】

class Datepublic:/*// 如果用户显式定义了构造函数,编译器将不再生成_day = day;int _month;int _day;int main()// 会报错Date d1;return 0;将Date类中构造函数屏蔽后,代码可以通过编译,因为编译器生成了一个无参的默认构造函数;将Date类中构造函数放开,代码编译失败,因为一旦显式定义任何构造函数,编译器将不再生成;

weixin_73359101的博客 1664

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

[C++]类与对象(中):深入理解类的六个默认成员函数

【摘要】C++空类包含6个默认成员函数:构造函数、析构函数、拷贝构造函数、赋值运算符重载、取地址重载和const取地址重载。构造函数初始化对象,析构函数清理资源;拷贝构造函数实现对象复制,涉及资源管理时需要深拷贝;赋值运算符重载需注意连续赋值和自赋值问题。const成员函数保障对象状态不被修改。对于资源管理类(如动态内存),必须自定义拷贝构造、赋值重载和析构函数以避免浅拷贝导致的内存问题,而简单类可依赖编译器生成的默认实现。流运算符重载通常作为友元函数实现。合理运用这些特性是C++面向对象编程的核心。

2403_87856518的博客 924

C++类和对象(类的定义、隐含的this指针、 const成员、类的六个默认成员函数)

class是定义类的关键字,name为类名,{}里的内容为类的主体,注意类定义结束后的不能省略。 1.1 定义类的两种方式 1.声明和定义全部放到类中。注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理 2.类声明放在.h文件中,成员函数定义放在.cpp文件中。注意:成员函数名前需要加类名:: 2. 类的访问限定符 c++有三种访问限定符:public,protected,private访问限定符的说明:1.public修饰的成员在类外可以直接被访问 2.protected和private

laimaxgg 1267

c++类和对象(六个默认成员函数)

一.类的六个默认成员函数 如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情 况下,都会自动生成下面6个默认成员函数 默认成员函数:用户没有自己写,编译器会自动生成,一旦用户 class Date{}; 二.构造函数 1.概念 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。 2.特性 函数名与类名相同 无返回值 对象实例化时编译器自动调用对应的构

m0_58103115的博客 682

类和对象(中)—— 类的六个默认成员函数

那什么是构造函数呢?函数名与类名相同。无返回值,不需要写void。创建对象时由编译器自动调用,可以保证每个数据成员都有一个合适的初始值,并且在对象整个生命周期内只调用一次。构造函数可以重载。如果类中没有显示定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦显示定义则不再生成。调用无参构造的时候不能写stu s1();因为这样和函数声明无法区分;调用带参构造函数的时候,需要指明参数。析构函数名是在类名前加上 ~。析构函数没有参数,也没有返回值(不需要显示写void)。

知其然 知其所以然 1360

【C++精华铺】5.C++类和对象(中)类的六个默认成员函数

我们想到空类的时候肯定想到的是里面什么都没有的类称之为空类,但是事实却并非如此。当一个类里面什么都不写的时候编译器会默认生成六个默认成员函数来完成一个类的基本功能。构造函数:对象初始化工作。析构函数:空间清理工作。拷贝构造和赋值运算符重载:对象的拷贝复制工作。取地址和const取地址重载:一般很少自己实现,除非需要给用户返回指定的特殊的地址。

C++领域内容分享 1341

C++:类与对象---类的六个默认成员函数

如果一个类中什么成员都没有,简称为。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。

2302_76267737的博客 789

C++类和对象(中)六个默认成员函数

class Dateprivate:// 基本类型(内置类型)// 自定义类型Time _t;return 0;运行结果:分析:main方法中创建了Date对象d,而d中包含4个成员变量;在4个成员变量中,_year、_month、 _day三个是内置型变量,_t是自定义类型变量;

2301_77203593的博客 1344

类与对象的六个默认成员函数

类的6个默认构造函数 如果一个类是空类,那么编译器会默认生成6个构造函数,这六个构造函数 1)初始化和清理两个:构造函数和析构函数 2)拷贝复制:拷贝构造和赋值重载 3)取地址重载:主要是普通对象和const对象取地址(很少自己实现)此处为两个 构造函数 构造函数:就相当于一台机床(种类单一的),只要给出相应的属性就可以造出相应的对象。 它是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编...

Advsance的博客 459

类和对象(2)(六个默认成员函数)

默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。一个类,我们不写的情况下编译器会默认生成以下 6 个默认成员函数,需要注意的是这 6 个中最重要的是前 4 个,最后两个取地址重载不重要,我们稍微了解一下即可。其次就是 C++11 以后还会增加两个默认成员函数,移动构造和移动赋值,这个我们后面再讲解。默认成员函数很重要,也比较复杂,我们要从两个方面去学习。构造函数是特殊的成员函数,

Jason_from_China的博客 1405

C++————类与对象<二>(类的六个默认成员函数)

int _day;};//函数名 operator操作符//返回类型:看操作符运算后返回值是什么//参数:操作符有几个操作数,他就有几个参数{{}{}{}else{}}int main(){//默认情况下,C++是不支持自定义类型对象使用运算符d1 > d2;//编译器看到这个就会将其转换为operator>(d1,d2),就像函数调用一样。

m0_57249790的博客 1919
上一篇: C++类与对象(上)
下一篇: C++之初始化列表
1无名之辈1
博客等级 码龄5年 4674粉丝 46原创
评论 27
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1无名之辈1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值