C++构造函数;

C++中构造函数的分类:

(===构造函数是用来初始化数据成员的,当然不包括静态数据成员)

(===无返回值)

是当对象在创建的时候系统会自动调用构造函数去初始化对象,但是如果构造函数有参数就需要在定义的时候加一个参数表)

1.默认构造函数:类名();//即使自己不定义默认构造函数,系统也会自动定义一个默认构造函数,只不过此时对于数据成员的初始化是随机分配的数

2.含参构造函数:类名(参数表);

3.拷贝构造函数:类名(const 类名 &obj);  //const可以省略

4.重载构造函数:就是在一个类里面有多个方法名都是类名,参数表不同的函数(参数表是可以不用参数名的,所以也就是说参数名不同不等于参数表不同)


以下文均以Date类为例

//定义的类的声明头文件

#ifndef _WOSHILEIA_H_
#define _WOSHILEIA_H
#include
    
    
     
     
using namespace std;
class Date
{
public:
	Date();
	Date(int y, int m, int d) :year(y), mon(m), day(d){};
//	Date(const Date &obj);  避免造成歧义
	Date(Date &obj);
	~Date();
	void Getdate(void);
private:
	int year;
	int mon;
	int day;
};
#endif
    
    
//定义的类的定义(实现)的cpp文件

#include"woshileia.h"
Date::Date()
{
	year = 2000;
	mon = 1;
	day = 1;
}
/*
Date::Date(const Date &obj)
{
	year = obj.year;
	mon = obj.mon;
	day = obj.day;
}
*/
Date::Date(Date &obj)
{
	year = obj.year;
	mon = obj.mon;
	day = obj.day;
	obj.year = 1998;
}
Date::~Date()
{
	cout << "正在析构" << year << "年" << mon << "月" << day << "日" << "对象"<
    
    
//定义的主函数的cpp文件

#include"woshileia.h"
#include
     
     
      
      
int main(void)
{
	
	Date date1;//调用无参构造函数或者叫做默认构造函数
	Date date2(1999, 1, 23);//调用含三参构造函数
	Date date3(date2);//调用拷贝构造函数----因为不管定义的拷贝构造函数有没有const,对象在调用构造函数的时候是没有考虑的,所以会有歧义产生
	Date date4=date1;//调用拷贝构造函数---故把那个有const的代码给注释掉了,仅展现没有const会产生什么样的结果,进而说明为什么拷贝构造函数最好加const
	date1.Getdate();//输出结果为1998年1月1日
	date2.Getdate();//输出结果为1998年1月23日
	date3.Getdate();//输出结果为1999年1月23日
	date4.Getdate();//输出结果为2000年1月1日
	system("pause");
	return 0;//析构函数在执行return的时候自动调用,当然这在VS上面的观看效果是一瞬间的事情
			 //在同一个作用域下,先构建的变量后析构
}
     
     


C++中的析构函数

形式:~类名();

//无返回值,无参数;

//即使自己不定义析构函数,系统也会自动定义一个空的析构函数;

//是当对象准备消亡的时候(delete的时候或者在return的时候或者在system("exit"的时候,反正就是在对象要消亡的时候),系统会自动调用该对象的析构函数,而且调用顺序是:在相同作用域内,先创建的对象后析构,后创建的对象先析构。

---------------------------------------------------------------------------------------------------------------------



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值