类的构造函数初探

每个类都定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。只要类的对象被创建,就会执行构造函数。

构造函数的名字与类名相同,没有返回值,可以重载,不能被声明为const的。如果类中没有构造函数,编译器会提供一个默认的构造函数,默认的构造函数会对类的数据进行类内初始值初始化或者默认初始化,默认初始化则是随机值。

一般来说,我们都会为类提供一个带参数的构造函数,采用构造函数初始值列表的形式或者赋值的形式,分别如下所示:

class Student

{

public:

         Student(std::string s,int num,double gra) :name(s),number(num),grade(gra){}//自己定义的构造函数

private:

         std::string name;

         int number = 0;

         double grade = 0;     

};

这是采用构造函数初始值列表的形式。

class Student

{

public:

         Student(std::string s,int num,double gra)//自己定义的构造函数

         {

                   name= s;

                   number= num;

                   grade= gra;

         }

private:

         std::string name;

         int number = 0;

         double grade = 0;

};

这是采用赋值的形式。

初始化和赋值的区别在于:前者直接初始化数据成员,后者则先初始化再赋值。这样前者的效率更高。除此之外,如果成员是const、引用或者属于某种未提供默认构造函数的类类型,则必须采用构造函数初始值列表的形式。

另外,如果自己定义了构造函数,那么编译器就不再提供一个默认的构造函数,所以一般会自己再定义一个默认的构造函数,通过Student() =default产生一个默认的构造函数。上述类的完整构造函数定义如下:

class Student

{

public:

         Student()= default;

         Student(std::string s,int num,double gra) :name(s),number(num),grade(gra){}//自己定义的构造函数

private:

         std::string name;

         int number = 0;

         double grade = 0;     

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值