C++类的使用(二)—— explicit构造与const成员赋值

一、代码实例

class Class
{
public:
	Class(int x)
	{_x = x;}

	int getX()
	{return _x;}

private:
	int _x;
};

Class object = 1;

类的定义就不说了,可以参考本序列的第一篇类的使用(一)
关键是最后一行Class object = 1;
object的类型明明时Class,怎么可以赋值为1呢?
答案就在代码第四行Class(int x)
这个构造为单参数构造函数,所以在创建对象时,可以用=来代替()
注意一定时创建对象,不能对已存在的对象进行赋值,比如下面这段代码就会报错

Class object;
object = 1;

虽然和第一段代码看上去没什么区别,但其实本质完全不一样

二、explicit标识

我们再看一段代码

class Class
{
public:
	explicit Class(int x)
	{_x = x;}

	int getX()
	{return _x;}

private:
	int _x;
};

Class object = 1;

好像没什么区别嘛,就是在第四行多了一个explicit
其实区别大着呢,这段代码会报错,原因就在explicit
explicit在英文中时纯净的意思,在C++中放在构造函数前,指明这个构造函数不能用=代替()
所以explicit通常被用来限制一些间接型的构造函数,而仅允许直接型构造函数使用=,是一种代码规范

三、const成员赋值

const变量本身不能更改,在类中也是这样
可是一个类在被创建时总得有个初始值吧,如果成员变量中还有const变量,那怎么才能在构造函数赋值呢?
老规矩,先看代码

class Class
{
public:
	Class(int x)
		:_x(x)
	{}

	int getX()
	{return _X;}

private:
	const int _x;
};

Class object = 1;

只需要在构造函数的声明后,加上:var(value)就行了
有多个const变量需要初始化用,连接::var1(value1),var2(value2),...
这种方法也可用于普通成员变量的赋值,但只能用于构造函数

本序列的文章:
C++类的使用(一)
C++类的使用(二)—— explicit构造与const成员变量赋值
C++类的使用(三)—— 封装
C++类的使用(四)—— 继承
C++类的使用(五)—— 多态
C++类的使用(六)—— 判断继承

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值