C++类中构造函数

我们在定义一个类之后,在利用该类定义了一个对象后,往往需要对该对象中数据成员变量进行初始化。有时候我们会误操作,忘记初始化或者重复初始化,这样做都会造成程序的崩溃。C++给我们提供了一个很有用的方法,就是类的构造函数。

C++类的构造函数,和其它成员函数一样,在类中定义。不过构造函数和其他成员函数不一样的是,它没有返回值,连有void也不行,它的名称和类名一模一样,它在对象实例化的时候被自动调用且仅被调用一次。如果没有人为定义一个构造函数,编译器将会自动的加载一个构造函数,它是空的,不进行任何操作,和下面这个例子中我们定义的构造函数一样:

class teacher
{public:
   teacher();
 };

定义了一个teacher类,其中里面有个构造函数teacher(),它不做任何事情,这是无参的构造函数。

class teacher
{
public:
    teacher(){m_strName = "TOM";}
private:
    string m_strName;
};
这也是个无参的构造函数,不过它有对属性m_strName进行操作,进行了初始化值为“TOM”;

class teacher
{
public:
    teacher(string name){m_strName = name;}
private:
    string m_strName;
};


这是有参的构造函数,它可以让我们在定义一个teacher类对象的时候,就传入参数name,例如

teacher t_ch("Tom");


这样,我们在定义一个对象t_ch 时,就初始化了该对象的m_strName为“TOM”.

还有,类构造函数可以利用初始化列表进行对属性赋值。利用初始化列表对属性进行赋值,除了具有以上的作用外,最重要的是,如果该类中定义了一个常量const,则在对这个常量进行初始化的时候,只有利用初始化列表进行赋值初始化。如下图所示:

class teacher
{
public:
    teacher(string name, int age, int m):m_strName(name),m_iAge(age),m_iMax(m);
private:
    string m_strName;
    int m_iAge;
    const int m_iMax;
};
上例中,m_iMax为由const定义的全局常量,我们知道我们是无法在定义之外对全局常量进行赋值修改,而类中又不允许在定义的时候初始化,那么,只能通过初始化列表的方式来对全局常量进行初始化。

另外,构造函数可以有多个,可以进行重载,具体在初始化的时候,选取哪个构造函数,取决于你传入的参数。关于重载,这里就不详细解释了。

综上,类的构造函数分为两大类,第一大类为无参的构造函数,我们也称之为系统默认的构造函数;第二大类为有参的构造函数,有参的构造函数又可以分为带有默认值的有参构造函数和不带默认值的有参构造函数。

除以上常规的构造函数外,还有一种比较特殊的拷贝构造函数,它是在当你首先实例化程序中第一个对象后,用实例化的第一个对象来实例化剩下的对象,例如

int main()
{
   teacher t_ch;
   teacher t_ch2 = t_ch;
   teacher t_ch3(t_ch);
   return 0;
}

在实例化 t_ch2 和 t_ch3时,就不会调用teacher类中定义的构造函数,而会调用拷贝构造函数,其格式为  类名(const 类名 &变量名)

class teacher
{
public:
     teacher(){m_strName ="Tom";}
     teacher(){const teacher &name){}
private:
     string m_strName;
};
第二个构造函数即为拷贝构造函数。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值