构造函数和析构函数和复制构造函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五
【实验内容】
构造函数和析构函数和复制构造函数
构造函数
1. 构造函数是类的一个特殊成员函数,它的函数名与类名相同。
2. 构造函数定义了对象数据成员的初始化方法,它只在创建对象时
被系统自动调用,并且只在创建对象时调用一次,是为创建的对象分配内存空间和对数据成员进行初始化。
3. 构造函数无函数类型,没有返回值,一般都声明为公有函数。4.C++规定,每个类必须有构造函数,没有构造函数就不能创建对象。
5.如果程序中未声明构造函数,则系统自动产生出一个默认形式的构造函数,如果提供了一个构造函数,系统就不能自动提供一个默认的构造函数。
6.构造函数可以重载,即可以定义多个参数及参数类型不同的构造函数。
复制构造函数
又称拷贝构造函数,是一种特殊的构造函数,其形参为本类的对象引用。功能是把初始值对象的每个数据成员的值都复制到新建立的对象。
如果程序员没有为类声明拷贝初始化构造函数,则编译器自己生成一个拷贝构造函数。
1. 当用类的一个对象去初始化该类的另一个对象时系统自动调用它
实现拷贝赋值。
2. 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自
动调用拷贝构造函数。
3. 当函数的返回值是类对象时,系统自动调用拷贝构造函数。
析构函数
析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在类的生命周期结束的时候,由系统自动调用。
析构函数和构造函数的最主要的区别:调用期不同、构造函数可以有参数可以重载。
实验1
设计一个学生类stu,其中含有数据成员name、english和math,分别表示学生的姓名、英语成绩与数学成绩,使用类的成员函数output 和total输出学生的基本信息和总成绩,并完成在main函数中的相应调用。
#include
using namespace std;
class stu
{
public:
stu(char n[]="",double e=0.0,double m=0.0);
~stu();
void input();
void output();
void total();
private:
char name[8];
double english,math;
};
stu::stu(char n[],double e,double m)
{
strcpy(name,n);
english=e;
math=m;
}
stu::~stu()
{
}
void stu::input()
{
cout<<"请输入学生的姓名、英语成绩与数学成绩:"< cin>>name>>english>>math; } void stu::output () { cout<<"学生的姓名、英语成绩与数学成绩:"< } void stu::total () { cout<<"学生的总成绩是:"< } void main() { stu s1("张思宁",95,80),s2; s2.input (); s1.output (); s1.total (); s2.output() ; s2.total (); } 实验2 练习书上112页例4-2,熟悉复制构造函数被调用的3种情况。