在接下来的几篇博客中,我将详细的介绍 C++ 的构造函数和析构函数
构造函数
-
什么叫叫构造函数:
函数名与类同名,没有返回值,在创建对象时自动调用,这种特殊的函数就是构造函数,构造函数包括 无参构造函数 和 有参构造函数
-
构造函数的特点
1、没有返回值(void都不能写)
2、可以有参数、可以重载、可以有多个构造函数
3、一旦自定义了构造函数,必须使用其中一个自定义的构造函数来初始化对象
4、注意:通过malloc分配的对象不会调用构造函数(这也是new和malloc的区别) -
为什么要使用构造函数
在前面的封装中讲过,我们可以通过setter方法为我们的成员变量赋值,但多多少少会觉得这样很麻烦。当有了构造函数,我们就可以在创建对象的同时也为我们的成员变量赋值。 -
构造函数的重载和调用(代码)
class Person {
private:
int m_age;
int m_height;
public:
Person() {
cout << "无参构造函数:Person()" << endl;
cout << "age=" << m_age << ",height=" << m_height << endl;
}
Person(int age) {
m_age = age;
cout << "有参构造函数:Person(int age)" << endl;
cout << "age=" << m_age << ",height=" << m_height << endl;
}
Person(int age,int height) {
m_age = age;
m_height = height;
cout << "有参构造函数:Person(int age,int height)" << endl;
cout << "age=" << m_age << ",height=" << m_height << endl;
}
};
//全局区
Person g_p1; //调用无参构造函数:Person()
Person g_p2(); //这只是一个函数声名,无参,返回值类型为Person
Person g_p3(20); //调用有参构造函数:Person(int age)
Person g_p4(20,180); //调用有参构造函数:Person(int age,intheight)
int main() {
//栈空间
Person z_p1; //调用无参构造函数:Person()
Person z_p2(); //这只是一个函数声名,无参,返回值类型为Person,
Person z_p3(20); //调用有参构造函数:Person(int age)
Person z_p4(20, 180); //调用有参构造函数:Person(int age,intheight)
//堆空间
Person *d_p4 = new Person; //调用无参构造函数:Person()
Person *d_p5 = new Person(); //调用无参构造函数:Person()
Person *d_p6 = new Person(40); //调用有参构造函数:Person(int age)
Person *d_p7 = new Ped_rson(50,190);//调用有参构造函数:Person(int age,intheight)
getchar();
return 0;
}
运行结果
在上面的代码中,给大家挖了一坑,在代码中都标注说明了,可以好好看看!!!
(编译环境:Visual Studio)
但是为什么运行的结果中有很多乱七八糟的数字呢?其实这就涉及到默认情况下成员变量和对象的初始化问题,这个问题在下篇博客中会详细讲解。