前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++的构造函数

C++的构造函数

作者头像
叶茂林
发布2023-07-30 09:45:58
1500
发布2023-07-30 09:45:58
举报
文章被收录于专栏:叶子的开发者社区

类对象初始化

很多时候我们希望在创建一个类对象的同时能够给它的数据成员赋初值,因为类的数据成员是不能在声明的时候赋初值的,所以一种方法是可以通过定义成员函数来给数据成员赋初值,但有时候我们可能会忘记去调用这个函数,因此能不能建立一种机制,让系统自动调用赋初值的函数呢?

这就引出了构造函数。

构造函数

C++提供了构造函数来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。

注意:

构造函数的名字必须与类名同名,而不能由用户任意命名,以便编译系统能识别它并把它作为构造函数处理。

它不具有任何类型,不返回任何值。

构造函数的功能是由用户定义的,用户根据初始化的要求设计函数体和函数参数。

如果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。

形式

构造函数根据参数的情况,可以分成不带参数的默认构造函数、带参数的构造函数和传引用的构造函数,还有一种参数初始化列表的形式,下面我们一一来看。

不带参数的默认构造函数

我们首先来定义一个类作为例子:

代码语言:javascript
复制
class Point
{
	double x,y;
	public:
		Point();
};

这个Point类的私有数据成员有x和y,成员函数只有Point,你发现这个成员函数连函数类型都没有声明,而且函数名和类名一样,嗯,对,这就是构造函数,而且是没有参数的默认构造函数。

我们在类外定义这个默认构造函数:

代码语言:javascript
复制
Point::Point()
{
	x=0;
	y=0; 
}

这样,我们在定义新一个类对象的时候,系统就会自动调用这个函数给x和y赋初值。

下面我们来看带参数的。

带参数的默认构造函数

还是我们的Point类,直接看代码:

代码语言:javascript
复制
class Point
{
	double x,y;
	public:
		Point(double x_value,double y_value);
};

可以看到类声明的时候就带上了参数,然后看类外定义这个带参数的构造函数:

代码语言:javascript
复制
Point::Point(double x_value,double y_value)
{
	x=x_value;
	y=y_value;
}

参数初始化列表式不带参数的默认构造函数

我们在类声明的时候和不带参数的默认构造函数是一样的:

代码语言:javascript
复制
class Point
{
	double x,y;
	public:
		Point();
};

但在定义的时候更加简洁方便:

代码语言:javascript
复制
Point::Point():x(0),y(0){}

其中的{}内仍然可以写语句,可以执行。但就赋初值的功能来看,写成这样就可以了。

参数初始化列表式带参数的构造函数

我们在类声明的时候和带参数的构造函数是一样的:

代码语言:javascript
复制
class Point
{
	double x,y;
	public:
		Point(double x_value,double y_value);
};

 但在定义的时候更加简洁方便:

代码语言:javascript
复制
Point::Point(double x_value,double y_value):x(x_value),y(y_value){}

依然,{}内仍然可以写语句,可以执行。但就赋初值的功能来看,写成这样就可以了。

传引用的构造函数实际上是拷贝构造函数,里面涉及深拷贝和浅拷贝,我们下期再聊这个。 

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类对象初始化
  • 构造函数
  • 形式
    • 不带参数的默认构造函数
      • 带参数的默认构造函数
        • 参数初始化列表式不带参数的默认构造函数
          • 参数初始化列表式带参数的构造函数
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档