您的位置:首页 > 编程语言 > C语言/C++

新手入门C++(2):类的构造函数与析构函数基础详解

2020-03-31 19:15 651 查看

类的构造函数与析构函数

1)构造函数是一个函数成员,在对象创建时,采用给定的值,自动调用该函数将对象中的数据成员初始化

2)析构函数也是一个函数成员,当对象终止时,将自动调用该函数进行处理

构造函数特点:

1>构造函数是与类同名的函数成员

2>没有返回值类型,也没有void

3>如果构造函数没有参数,则称为缺省构造函数,构造函数的参数可以设置

4>如果程序中未声明,则系统会自动生成缺省形式的构造函数

5>构造函数允许为内联函数,重载函数,带缺省形参值的函数

接下来我们看一下构造函数的几种使用方式

/*构造函数的引用*/
class Stduents
{	Stduents();//默认构造函数
Stduents(int num,int height);//带参构造函数
}
/*构造函数的使用*/
//假如定义一个统计学生个人身体情况的类
#include<iostream>
using namespace std;
class Students
{
public:
Students();//默认构造函数
Students(int s_number,short s_age,double s_height);//带参构造函数
int    S_number;
short  S_age;
double S_height;
int    getnumber();
short  getage();
double getheight();
};
//在默认构造函数中进行初始化
Students::Students()
{
S_number=3068845;
S_age=20;
S_height=1.75;
}
//在带参函数中进行初始化
Students::Students(int s_number,short s_age,double s_height)
{
S_number=s_number;
S_age=s_age;
S_height=s_height;
}
int Students::getnumber()
{
return S_number;//返回学生的学号
}
short Students::getage()
{
return S_age;//返回学生的年龄
}
double Students::getheight()
{
return S_height;//返回学生的身高
}
//在主函数中输出类成员的值
int main()
{
Students p1;//用默认构造函数初始化成员变量,声明了对象p1
cout<<"the Students number is:"<<p1.getnumber()<<endl;//输出默认情况下对象p1学生的学号;

Students p2(3068754,19,1.80);//用带参数的构造函数初始化成员变量,声明了对象p2
cout<<"the Studens number is:"<<p2.getnumber()<<endl;//输出带参数情况下对象p2学生的学号;
return 0;
}

注意与知识点 :

①:如果一个类中有指针,那么我们需要在构造函数中为这个指针分配空间

②:在调用类成员函数或数据时,需要先指明对象.

构造函数的复制:

什么是构造函数的复制:编译器调用来完成一些基于同一类的其他对象的构建以及初始化,其唯一的形参必须是引用

一般来说编译器会自动生成默认构造函数,但我们也可以对构造函数的复制进行编写

/*我们对上述代码进行补充,就可以实现构造函数的复制*/
Students::Students(const Students & copystd)
{
S_number=copystd.S_number;
S_age   =copystd.S_age;
S_height=copystd.S_height;
}//复制构造函数的编写
/*调用构造函数的方法*/
/*以上述代码为例子*/
class 类标识符
{
Students(Stduents&copytstd);
};
mian()
{		Students s2(s1);
Students  s2=s1;
}

析构函数特点:

1.析构函数也与类同名,前面多一个波浪号

2.当一个对象终止时,系统自动调用析构函数进行处理

3.里面的内容往往是完成空间的释放

注意点:

①:析构函数没有返回值类型

②:析构函数无参数

③:一个类只有一个析构函数

/*对上述代码使用析构函数,只需要在.h文件中输入:*/
class 类标识符
{
~Students();
}
Students:Students:()
{
delete [] S_number,S_age,S_height;
}

总结:我们在使用自动变量作用的模块时,当模块激活时,自动变量调用构造函数,退出时会调用析构函数,

全局变量进入main()函数前会调用构造函数,而程序终止的时候会调用构造函数

动态分配的对象在使用new为对象分配内存时调用构造函数,而使用delete删除对象调用析构函数

临时变量的生存期的开始会调用构造函数,结尾调用析构函数

  • 点赞
  • 收藏
  • 分享
  • 文章举报
客行 发布了9 篇原创文章 · 获赞 0 · 访问量 224 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: