C++类中构造函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Murdock_C/article/details/47374215

我们在定义一个类之后,在利用该类定义了一个对象后,往往需要对该对象中数据成员变量进行初始化。有时候我们会误操作,忘记初始化或者重复初始化,这样做都会造成程序的崩溃。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;
};
第二个构造函数即为拷贝构造函数。


猜你喜欢

转载自blog.csdn.net/Murdock_C/article/details/47374215