一、代码实例
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++类的使用(六)—— 判断继承