C++中构造函数和析构函数

Wesley13
• 阅读 781

构造函数

定义

它是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与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;

}

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
C++ 析构函数与内存池
CPrimer书中也提到编写class时要注意copycontrol成员(拷贝构造函数,赋值操作符,析构函数,C11又多个移动构造函数)。工作时在C和C之间切换,有时就忘记了C的细节(真的好讨厌)。C析构函数与构造函数对应,构造对象时调用构造函数,析构对象时调用析构函数,于是可以在对象的析构函数中释放资
Wesley13 Wesley13
3年前
C++重载双目运算符(2)(对象与数之间)
有两种方法:(1)采用重载双目运算符方式(2)1.类型转换函数(将类的对象转换为其他数据类型)2.转换构造函数(将其他类型转换为类的对象)(仍然要配合重载双目运算符的方式,因为最终实现的是类的两个对象相加)(注意:类型转换函数和转换构造函数不可同时使用,会出现二
Wesley13 Wesley13
3年前
C++简单构造函数的写法
csdn主页:https://blog.csdn.net/qq\_43605085(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fblog.csdn.net%2Fqq_43605085)构造函数定义:是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总
Wesley13 Wesley13
3年前
C++进阶
///任何时候都不要在构造函数或析构函数中调用虚函数/classdog{public:stringm_name;
Wesley13 Wesley13
3年前
C++ 类与结构体 构造函数 详细相关理解整理
说到构造函数,通常是将讲对象创建时编译器自动调用构造函数为对象初始化,也可以说是分配内存空间。 学习了构造函数相对其中牵涉到的一些点作下大概的了解和学习,整理一下只是点。这里主要说下 类与结构体的差异/类与结构体包含继承关系时的构造调用/类的初始化列表/默认构造函数/拷贝构造函数以及牵涉到的相关内容结构体和类的区别
Wesley13 Wesley13
3年前
Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行。执行顺序优先级:静态块,main(),构造块,构造方法。构造函数publicHelloA(){//构造函数}关于构造函数,以下几点要注意:1.对象一建立,就会调用与之相应的构造
Wesley13 Wesley13
3年前
VC++知识点整理
1.内联函数定义:定义在类体内的成员函数,即函数的函数体放在类体内特点:在调用处用内联函数体的代码来替换,用于解决程序的运行效率问题。一定要在调用之前定义,并且内联函数无法递归调用。2.构造函数与析构函数构造函数:用于为对象分配内存空间,对类的成员变量进行初始化,并执行其他内部管理操作。可以接受参
小万哥 小万哥
9个月前
C# 面向对象编程进阶:构造函数详解与访问修饰符应用
C构造函数构造函数是一种特殊的方法,用于初始化对象。构造函数的优势在于,在创建类的对象时调用它。它可以用于为字段设置初始值:示例获取您自己的C服务器创建一个构造函数:csharp//创建一个Car类classCarpublicstringmodel;//创
小万哥 小万哥
9个月前
Java 构造函数与修饰符详解:初始化对象与控制权限
Java构造函数Java构造函数是一种特殊的类方法,用于在创建对象时初始化对象的属性。它与类名相同,并且没有返回值类型。构造函数的作用:为对象的属性设置初始值执行必要的初始化操作提供创建对象的多种方式构造函数的类型:默认构造函数:无参数的构造函数,如果用户
小万哥 小万哥
7个月前
C++ 构造函数实战指南:默认构造、带参数构造、拷贝构造与移动构造
C构造函数构造函数是C中一种特殊的成员函数,当创建类对象时自动调用。它用于初始化对象的状态,例如为属性分配初始值。构造函数与类同名,且没有返回值类型。构造函数类型C支持多种类型的构造函数,用于满足不同的初始化需求:默认构造函数:不带参数的构造函