【C++】【类与对象超强知识汇总】(四)

一、再谈构造函数

初始化列表

我们先从上一章的栈开始讲

在这里插入图片描述
Stack 不具备默认构造,Myqueue 也无法生成默认构造,那我们只能去显示的写构造

  • 这个时候就需要用到我们的初始化列表

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量" 后面跟一个放在括号中的初始值或表达式

👇代码实现

class Date
{
   
public:
	Date(int year, int month, int day)
		: _year(year)
		, _month(month)
		, _day(day)
	{
   }
private:
	int _year;
	int _month;
	int _day;
};
  • 【注意】
  1. 每个成员变量在初始化列表中只能出现一次
  2. 类中包含以下成员,必须放在初始化列表位置进行初始化:
    引用成员变量
    const成员变量
    自定义类型成员(且该类没有默认构造函数时)

🔺所以对于第一个问题,我们就很好的解决了在这里插入图片描述

//Stack 不具备默认构造, MyQueue 也无法生成默认构造
class MyQueue
{
   
public:
	MyQueue(int n)
		:_pushst(n)
		,_popst(n)
		,_size(0)
	{
   }
private:
	//
	Stack _pushst;
	Stack _popst;
	int _size;
};

在这里插入图片描述
在这里插入图片描述

但是有一个必须在初始化列表初始化:那就是const

  • 因为const必须在定义的时候就初始化

  • 相同的,引用在定义的时候初始化

⭐ 根据这个,我们可以得出以下结论
在这里插入图片描述
在这里插入图片描述

  • 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。

在这里插入图片描述
在这里插入图片描述

class A
{
   
public:
    A(int a)
       :_a1(a)
       ,_a2(_a1)
   {
   }
    
    void Print() {
   
        cout<<_a1<<" "<<_a2<<endl;
   }
private:
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Reuuse

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

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

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

打赏作者

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

抵扣说明:

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

余额充值