-
复制构造函数
2021-03-18 21:50:24复制构造函数 是用来将一个对象复制到新创建的对象当中,是内容的拷贝, 函数原型通常如下 ClassName(const ClassName &); 何时调用复制构造函数 新建一个对象,并将其初始化为现有同类对象时,复制构造函数将会...复制构造函数 是用来将一个对象复制到新创建的对象当中,是内容的拷贝,
函数原型通常如下
ClassName(const ClassName &);何时调用复制构造函数
新建一个对象,并将其初始化为现有同类对象时,复制构造函数将会被调用
每当程序生成了对象的副本时,都会显示调用复制构造函数代码
此处并未写复制构造函数,他被注释起来了
头文件声明#ifndef __STUDENT_H__ #define __STUDENT_H__ class STUDENT { private: static int Amount; int nID; int nAge; public: STUDENT();//无参构造函数 STUDENT(int ID, int Age);//构造函数 // STUDENT(const STUDENT &Temp);//复制构造函数 ~STUDENT();//析构函数 void SetID(int ID); void SetnAge(int Age); int GetAmount(void); int GetID(void); int GetAge(void); };
源文件的定义
#include "stdafx.h" #include "Student.h" int STUDENT::Amount = 0; STUDENT::STUDENT()//无参构造函数 { Amount++; } STUDENT::STUDENT(int ID, int Age)//构造函数 { nID = ID; nAge = Age; Amount++; } //STUDENT::STUDENT(const STUDENT &Temp);//复制构造函数 STUDENT::~STUDENT()//析构函数 { Amount--; } void STUDENT::SetID(int ID) { nID = ID; } void STUDENT::SetnAge(int Age) { nAge = Age; } int STUDENT::GetAmount(void) { return Amount; } int STUDENT::GetID(void) { return nID; } int STUDENT::GetAge(void) { return nAge; }
main
#include "stdafx.h" #include "Student.h" int main(int argc, char* argv[]) { STUDENT a; cout<<a.GetAmount()<<endl; STUDENT b; cout<<b.GetAmount()<<endl; STUDENT c = b; cout<<c.GetAmount()<<endl; return 0; }
运行结果
程序说明,当声明一个类对象,且并未给其初始化为现有对象时,他将使用构造函数,所以Amount的值会+1,但是在第三个类对象c的时候,将其显示的初始化为现有类对象b,他将调用编译器提供的默认复制构造函数,所以Amount的值并未改变加入复制构造函数
STUDENT::STUDENT(const STUDENT &Temp)//复制构造函数 { Amount++; nID = Temp.nID; nAge = Temp.nAge; cout<<"复制构造函数"<<endl; } STUDENT STUDENT::Copy(const STUDENT &a)//程序生成一个对象的副本 { return a; }
main
int main(int argc, char* argv[]) { STUDENT a; cout<<a.GetAmount()<<endl; STUDENT b; cout<<b.GetAmount()<<endl; STUDENT c = b; cout<<c.GetAmount()<<endl; a = c.Copy(a); return 0; }
结果说明:当我们自己写了复制构造函数时,那么当用已有对象显示初始化新对象的时候,那么会调用我们自己的写的复制构造函数,然后最重要的一点,当生成对象副本的时候,也会调用显示构造函数
收藏数
9,957
精华内容
3,982