C++中构造函数和析构函数 4年前

构造函数

定义

它是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

另外,一个类可以有多个构造函数 ,我们可以根据其参数个数的不同或参数类型的不同来区分它们(这就是构造函数的重载)

特点

1.构造函数的命名必须和类名完全相同;

2.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。

(这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的)

3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;

4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,此默认构造函数是不带参数的;

(而一般的方法不存在这一特点)

5.构造函数有回滚的效果,构造函数抛出异常时,构造的是一个不完整对象,会回滚,将此不完整对象的成员释放;

定义格式

class <类名>

{

public:

<类名>(参数表);

//...(还可以声明其它成员函数)

};

<类名>::<函数名>(参数表)

{

//函数体

}

实例代码

下面通过一个实例代码来说明构造函数的使用方法:

#include

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() <

return 0;

}

析构函数

定义

析构函数与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作,比如释放分配的空间,关闭文件等;

【注】析构函数的作用并不是删除对象,在对象撤销它所占用的内存之前,做一些清理的工作。外汇赠金活动,清理之后,这部分内存就可以被系统回收再利用了;

特点

1.析构函数名与类名相同,只是再函数名前面加一个位取反符号~;

2.析构函数不能带任何参数,也没有返回值(包括void);

3.只能有一个析构函数,它是不能被重载的;

4.每个类有应该有一个析构函数,如果没有显式定义,那么系统会自动生成一个默认的析构函数(默认的析构函数什么也不做);

5.析构函数不能被显式调用,只能由系统自动调用;

定义格式

class <类名>

{

public:

~<类名>();

};

<类名>::~<类名>()

{

//函数体

}

实例代码

下面通过一个实例代码来说明析构函数的使用方法:

#include

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() <

return 0;

}

image
aphant
没关系的,都一样。
6
发布数
1
关注者
7235
累计阅读

热门教程文档

Rust
84小节
Linux
51小节
React Native
40小节
Djiango
17小节
Dart
35小节
广告