构造函数
类的初始化由构造函数完成, 如果没有为某个类编写构造函数, 编译器会自动这个类生成一个默认的构造函数. 构造函数主要用来在创建类的对象时为对象的成员变量赋值.
一个类可以有多个构造函数, 可以根据其参数个数或参数类型的不同进行区分, 即构造函数的重载.
构造函数的命名必须与类名完全相同; 其次, 构造函数主要用于初始化对象的状态, 因此没有返回值, 也不能用void修饰. 最后构造函数不能被直接调用, 必须在创建对象时才会自动调用.
一个类的构造函数的声明应是如下形式:
类名(参数表)
构造函数的实现可以在类内部完成, 也可以在类体外进行:
class Person{
public:
int age;
string name;
Person();
Person(int age, string name);
};
Person::Person(){
age = 0;
name = "hello";
}
Person::Person(int newAge, string newName){
age = newAge;
name = newName;
}
另外, 构造函数还可以用一种被称为初始化列表的方式来初始化成员变量, 代码如下:
Person::Person():age(0),name("hello"){
}
Person::Person(int newAge, string newName):age(newAge), name(newName){
}
这两种写法功能上没有任何区别, 但在使用继承时可以使用初始化列表对基类的成员属性进行初始化. 此外, 初始化列表中不能为数组类型的成员变量赋值.
析构函数
析构函数的语法与构造函数类似, 区别在于析构函数名前面有一个标记符号~
. 析构函数同样没有返回值:
Person::~Person(){
cout << "person die!" << endl;
}
当对象被销毁时会自动调用析构函数.