精华内容
下载资源
问答
  • 复制构造函数

    千次阅读 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;
    }
    

    在这里插入图片描述
    结果说明:当我们自己写了复制构造函数时,那么当用已有对象显示初始化新对象的时候,那么会调用我们自己的写的复制构造函数,然后最重要的一点,当生成对象副本的时候,也会调用显示构造函数

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,957
精华内容 3,982
关键字:

复制构造函数