复制构造函数


前言

复制构造函数是一种重载版本的构造函数,它是用一个已存在的对象初始化另一个新创建的同类对象。


一、复制构造函数声明

类名(const 类名&对象名);

二、复制构造函数的自动调用

1.系统自动调用的三种情况

①明确表示由一个已定义的对象初始化一个新对象。

②函数的形式参数为一个对象,当发生函数调用、对象作为实参传递给函数形参时,注意,如果形式参数时引用或指针,就不会调用复制构造函数,因为此时不会产生新对象。

③对象作为函数返回值。

2.代码如下(示例):

 .h文件(定义CDate类)

#pragma once
#include<iostream>
using namespace std;
class CDate
{
    int Date_Year, Date_Month, Date_Day;
public:
    CDate(int y = 2000, int m = 1, int d = 1);//声明构造函数,带参数
    CDate(const CDate &date);//声明复制构造函数
    void Display();
};

 .cpp文件(CDate类成员函数)

#include"D:\VScode\gouzaohanshu\copy.h"
using namespace std;
CDate::CDate(int y, int m, int d) :Date_Year(y), Date_Month(m), Date_Day(d)//构造函数的定义
{
	cout << "构造函数" << endl;
}
CDate::CDate(const CDate& date)//复制构造函数的定义
{
	Date_Year = date.Date_Year;
	Date_Month= date.Date_Month;
	Date_Day= date.Date_Day+1;//只要使用一次复制构造函数 ,日期延后一天
	cout << "copy构造函数" << endl;
}
void CDate::Display()//显示函数的定义
{
	cout << Date_Year <<"-"<< Date_Month <<"-"<< Date_Day << endl;
}

 .cpp文件(验证不同情况下调用不同的构造函数)

#include<D:\VScode\gouzaohanshu\copy.h>
CDate fun(CDate newdate1)//对象(eg.CDate newdate1)作为某个函数(CDate fun)的形参,
						//当发生函数调用、对象作为实参传递给函数形参时,自动调用copy构造函数------类型2
{
	CDate newdate2(newdate1);//调用copy构造函数------- 类型1(明确让一个对象 = 另一个对象)
	return newdate2;//作为返回值自动调用copy构造函数-------类型3
}
int main()
{
	CDate day1(2019, 3, 9);//通过构造函数初始化,实参优先于形参,显示2019—3—9
	CDate day3;//无实参,构造函数初始化后,使用默认值,显示2000-1-1
	CDate day2(day1);//调用copy构造函数-------类型1(明确让一个对象=另一个对象)
	day2.Display();
	CDate day4 = day2;//调用copy构造函数------类型1(明确让一个对象=另一个对象)

	day3 = day2;//简单赋值,没有调用任何构造函数,此时day3=2019-3-10

	day3 = fun(day2);//通过fun函数,调用了3次copy构造函数
	day3.Display();//显示为2019-3-13
	return 0;
}

总结

复制构造函数属于浅复制,仅仅是一个地址值,没有另外申请动态空间

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值