C++ 类构造函数 & 析构函数
类的构造函数和析构函数是两个特殊的成员函数,它会在每次创建类的新对象或销毁一个对象时执行
类的构造函数
类的 构造函数 是类的一种特殊的成员函数,它会在每次创建类的新对象时执行
构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void
因为类的构造函数会在创建类的对象时执行,所以可以在构造函数里为某些成员变量设置初始值
例如下面的代码,我们为 Line
类创建了一个构造函数
#include <iostream> using namespace std; class Line { public: void setLength( double len ); double getLength( void ); Line(); // 这是构造函数 private: double length; }; // 成员函数定义,包括构造函数 Line::Line(void) { cout << "Object is being created" << endl; } void Line::setLength( double len ) { length = len; } double Line::getLength( void ) { return length; } // 程序的主函数 int main( ) { Line line; // 设置长度 line.setLength(6.0); cout << "Length of line : " << line.getLength() <<endl; return 0; }
编译和运行以上范例,输出结果如下:
Object is being created Length of line : 6
带参数的构造函数
默认的构造函数没有任何参数
如果需要,构造函数也可以带有参数。这样在创建对象时就会给对象赋初始值
#include <iostream> using namespace std; class Line { public: void setLength( double len ); double getLength( void ); Line(double len); // 这是构造函数 private: double length; }; // 成员函数定义,包括构造函数 Line::Line( double len) { cout << "Object is being created, length = " << len << endl; length = len; } void Line::setLength( double len ) { length = len; } double Line::getLength( void ) { return length; } // 程序的主函数 int main( ) { Line line(10.0); // 获取默认设置的长度 cout << "Length of line : " << line.getLength() <<endl; // 再次设置长度 line.setLength(6.0); cout << "Length of line : " << line.getLength() <<endl; return 0; }
编译和运行以上范例,输出结果如下:
Object is being created, length = 10 Length of line : 10 Length of line : 6
使用初始化列表来初始化字段
使用初始化列表来初始化字段
Line::Line( double len): length(len) { cout << "Object is being created, length = " << len << endl; }
上面的语法等同于如下语法
Line::Line( double len) { cout << "Object is being created, length = " << len << endl; length = len; }
初始化列表可以初始化多个成员变量
假设有一个类 C,具有多个字段 X、Y、Z 等需要进行初始化
那么我们就可以使用初始化列表初始化它们,只需要在不同的字段使用逗号进行分隔
C::C( double a, double b, double c): X(a), Y(b), Z(c) { .... }
类的析构函数
类的 析构函数 会在每次删除所创建的对象时执行
析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号 ( ~
) 作为前缀
析构函数它不会返回任何值,也不能带有任何参数
析构函数有助于在跳出程序 ( 比如关闭文件、释放内存等 ) 前释放资源
#include <iostream> using namespace std; class Line { public: void setLength( double len ); double getLength( void ); Line(); // 这是构造函数声明 ~Line(); // 这是析构函数声明 private: double length; }; // 成员函数定义,包括构造函数 Line::Line(void) { cout << "Object is being created" << endl; } Line::~Line(void) { cout << "Object is being deleted" << endl; } void Line::setLength( double len ) { length = len; } double Line::getLength( void ) { return length; } // 程序的主函数 int main( ) { Line line; // 设置长度 line.setLength(6.0); cout << "Length of line : " << line.getLength() <<endl; return 0; }
编译和运行以上范例,输出结果如下:
Object is being created Length of line : 6 Object is being deleted