1 为什么需要定义构造函数?
构造函数主要用来给成员变量初始化。
让类对象有一个良好的开始状态。
2 构造函数初始化成员变量
下面我们来完善上一篇文章中的几个构造函数。
让这些构造函数完成给成员变量初始化的职责。
为此,我们也把成员变量加上来。
构造函数示例
#include <iostream>
using namespace std;
struct Student
{
//默认构造函数 default constructor
Student() { cout << "Student()" << endl; };
//非默认构造函数,给m_age成员初始化
Student(int age) :m_age(age) { cout << "Student("<<m_age<<")" << endl; };
//非默认构造函数,给两个成员变量初始化
Student(int age, bool sex) :m_age(age), m_sex(sex)
{
cout << "Student(" << m_age << ", "<<boolalpha<<sex<<")" << endl;
};
//非默认构造函数,给3个成员变量初始化
Student(string name, int age, bool sex) :m_name(name), m_age(age), m_sex(sex)
{
cout << "Student("<<name<<"," << m_age << ", " << boolalpha << sex << ")" << endl;
};
private:
string m_name;//姓名
int m_age;//年龄
bool m_sex;//性别
};
int main()
{
Student stu1;//调用默认构造函数
Student stu2(10);//调用带一个整形参数的构造函数
Student stu3(10, true);//调用两个参数的那个构造函数
Student stu4("ZhangFei", 10, true);//调用3个参数的那个构造函数
return 0;
}
程序输出

构造函数的写法
构造函数给成员变量初始化的写法:
类构造函数(构造函数参数列表) : 成员变量1(参数1), 成员变量2(参数2),.... {}//函数体
Student(int age,bool sex):m_age(age),m_sex(sex){};
注意:那个冒号必不可少哦!
调试验证
构造函数真的初始化成员变量了吗?是的。
成员初始化的特点
从上图我们可以看出:
1)成员变量m_name是类类型的
如果你在构造函数中通过传入的参数初始化了m_name,m_name就用你初始化的值。
如果你没有在构造函数中初始化m_name,它就调用string的默认构造函数初始化自己。
string 的默认构造函数将自己构造为一个空字符串""。
2)成员变量是基本类型的
如果你没有在构造函数中初始化它,它的值是随机的值。
比如,m_age=-858993460, m_sex=true 。
注:至于m_sex为什么还显示了204,我也不清楚,我估计是计算机最小的地址单位是字节,而bool类型只占用了字节的一个位。所以计算机就干脆显示了那个字节里的内容给我们看(我猜的,毕竟这已经不是C++的内容了)。
默认构造函数
3 不定义构造函数成员变量就不初始化了吗?
不定义构造函数,编译器就会替我们合成一个默认构造函数。
默认构造函数对于成员变量是类类型的,调用这个成员变量所在类的默认构造函数初始化;
对于成员变量是基本类型的,C++没有规定(你可以认为是随机值)。
830

被折叠的 条评论
为什么被折叠?



