C++ 类构造函数和析构函数
-
类构造函数
类构造函数是类的特殊成员函数,只要我们创建该类的新对象,该构造函数便会自动执行。构造函数将具有与类完全相同的名称,并且根本没有任何返回类型,甚至没有void。构造函数对于为某些成员变量设置初始值非常有用。以下示例解释了构造函数的概念-
尝试一下#include <iostream> using namespace std; class Line { public: void setLength( double len ); double getLength( void ); Line(); // This is the constructor private: double length; }; // Member functions definitions including constructor Line::Line(void) { cout << "Object is being created" << endl; } void Line::setLength( double len ) { length = len; } double Line::getLength( void ) { return length; } // Main function for the program int main() { Line line; // set line length 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); // This is the constructor private: double length; }; // Member functions definitions including constructor 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; } // Main function for the program int main() { Line line(10.0); // get initially set length. cout << "Length of line : " << line.getLength() << endl; // set line length again 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) { .... }
-
类析构函数
析构函数是类的特殊成员函数,每当其类的对象超出作用域或将delete表达式应用于该类的对象的指针时,都执行该析构函数。析构函数的名称与以波浪号(~)为前缀的类的名称完全相同,并且既不能返回值,也不能采用任何参数。析构函数对于在程序退出之前释放资源非常有用,例如关闭文件,释放内存等。以下示例解释了析构函数的概念-
尝试一下#include <iostream> using namespace std; class Line { public: void setLength( double len ); double getLength( void ); Line(); // This is the constructor declaration ~Line(); // This is the destructor: declaration private: double length; }; // Member functions definitions including constructor 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; } // Main function for the program int main() { Line line; // set line length 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