每一个对象都应在它建立之时就有确定的内容,否则就失去了对象的意义。
不能在类声明中对数据成员初始化!!因为类并不是一个实体,而是一种抽象类型,并不占存储空间,显然无处容纳数据。
只有在调用构造函数时才执行这些赋值语句。构造函数和析构函数都是由系统调用的,而不用程序员自己调用。
在构建类对象的时候会自动调用构造函数。在建立对象时系统为该对象分配存储单元,此时执行构造函数,就是把指定的初值送到有关数据成员的存储单元中。每建立一个对象,就调用一次构造函数。
构造函数没有返回值,也没有类型。它的作用只是对队形进行初始化。因此也不需要再定义构造函数时声明类型,这是它和一般函数的一个重要的不同点。
带参数的构造函数:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
class Student
{
private:
int num;
char name[20];
char sex;
public:
void Show()
{
cout << "num: " << num << endl;
cout << "name: " << name << endl;
cout << "sex: " << sex << endl;
}
Student(int h = 0, char *ch1 = "wangpeng", char c = 'M')
{
num = h;
strcpy_s(name, ch1);
sex = c;
}
};
Student stu0;
stu0.Show();
}
因为在定义对象stu0的时候没有给实参,系统就调用默认构造函数,各形参的值区默认值。
应该在声明构造函数的时候指定默认值,而不能只在定义构造构造函数时指定默认值。
析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。
因为析构函数并没用函数参数,因此它不能被重载。一个类可以有多个构造函数,但是只能有一个析构函数。