新手入门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©tstd); }; 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删除对象调用析构函数
临时变量的生存期的开始会调用构造函数,结尾调用析构函数
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 详解C++中如何将构造函数或析构函数的访问权限定为private
- c++构造函数和析构函数详解
- C++ 构造函数与析构函数详解(二)---自由存储 new和delete
- c++ 构造函数和析构函数详解
- C++面向对象编程入门:构造函数与析构函数
- c++基础语法:构造函数与析构函数
- C++语法基础--派生类的构造函数,赋值操作符,析构函数,虚析构函数
- C++面向对象编程入门:构造函数与析构函数(一)
- C++语言基础 例程 调用构造函数和析构函数的顺序
- c++之基础知识(1)定义类的对象;析构函数和构造函数常用模板
- c++基础语法 构造函数 析构函数 类的组合
- C++面向对象编程入门:构造函数与析构函数(二)
- C++基础---构造函数与析构函数
- C++基础(九)继承与派生——派生类成员的构造函数和析构函数
- C++第十章__类和对象定义的基础知识__类的构造函数和析构函数__const成员函数__书中的构造函数和析构函数的总结__this指针 & 类对象作为类方法的参数 & 返回值为类对象的引用 __对象...
- C++面向对象编程入门:构造函数与析构函数(三)
- C++ 构造函数与析构函数详解(三)---局部静态存储 局部static
- C++中构造函数与析构函数的调用顺序详解
- C++基础(一)构造函数、析构函数、拷贝构造函数
- [新手向] VSCode编写C/C++的基础入门教程