【C++】类的六大默认的成员函数 之 构造函数

                                                                   

以上就是类的六大默认的成员函数,这篇博客主要讲构造函数。剩下的五个成员函数后边会持续更出

 

                                              构造函数

一.构造函数的定义

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

class Date
{
public:
	//构造函数
	Date(int year, int month, int day);

private:
	int _year;
	int _month;
	int _day;

};


Date::Date(int year,int month,int day)
{
	_year = year;
	_month = month;
	_day = day;

}


int main()
{
	
        Date t(1996, 9, 28);
	

	Date t2(2018, 7, 30); 


	system("pause");
	return 0;
}

二.构造函数的特点

  • 函数名与类名相同
  • 没有返回值
  • 新对象被创建时,由编译器自动调用,且在对象的生命周期内仅调用一次
  • 构造函数可以重载,实参决定了调用那个构造函数
  • 无参构造函数和带有缺省值的构造函数都认为是缺省的构造函数,并且缺省的构造函数只有一个
  • 有初始化列表(可以不用)
  • 如果没有显式定义时,编译器会合成一个默认的构造函数,值是这个构造函数的函数体是空的,也没有参数,不能进行初始化操作
  • 构造函数不能用const修饰
  • 构造函数不能为虚函数 
  • 构造函数不能别用户调用

三.初始化对象

        1.  初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个“成员变量”后边括号里放一个初始化值或者表达式

	Date(int year, int month, int day)
		:_year(1111)
		, _month(22)
		, _day(3)
	{ }

注意:

  • 每个成员在初始化列表中只能出现一次(因为初始化只能一次)
  • 初始化列表仅用于初始化类的数据成员,并不指定这些数据成员的初始化顺序,数据成员在类中定义顺序就是在参数列表中初始化的顺序
  • 尽量避免用成员初始化成员,成员的初始化顺序最好和成员的定义顺序保持一致

 

2.类中包含以下成员,一定要放在初始化列表位置进行初始化:

  • 引用成员变量
  • const成员变量
  • 类类型成员(该类有非缺省的构造函数

3.初始化列表和赋值的区别是什么????

    初始化列表只能初始化类中的成员一次

    赋值可以进行多次而且可以用this指针

三.构造函数的作用

  •  构造和初始化对象
  • 类型转换

              对于单个参数构造函数,可以将其接受参数转化为类类型对象。用explicit修饰构造函数,抑制有构造函数定义的隐式转换,explicit关键字在类内部的构造声明上,在类的定义体外部的定义上不再重复

构造函数和一般构造函数区别

1     时间不同

1.1   构造函数在对象创建过程中执行,当对象创建完毕,构造函数就结束

1.2   一般函数在对象创建完毕之后,通过对象的引用(对象堆内存地址)来调用,什么时候使用,什么时候调用

 

2     调用次数不同

2.1   构造函数只要在new对象的时候会被调用,一旦对象创建完成,我们不能手动去调用构造函数

2.2   一般函数可以通过对象随意调用,没有限制

 

3     互相调用问题

3.1   在构造函数中可以调用一般函数,但是一般函数不能调用构造函数

 

4     调用方式不同

4.1   构造韩式在创建对象时 ,有JVM自动调用

4.2   一般函数在对象创建时,通过对象调用

 

5 构造函数没有返回值在声明时也不需要类型,这是和一般函数的主要区别

             

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值