2018.5.23(c++面向对象--复制构造函数)

复制构造函数

#include<iostream>
#include<cstdio>
using namespace std;

class Test
{
public:
    double real,image;
public:
    Test ()//无参构造函数
    {

    };
    Test (double n)//含有一个参数的构造函数
    {
        real=n;image=n;
    };
    Test (const Test &c)//类Test的复制构造函数
    {
        real=c.real;
        image=c.image;
        cout<<"copy constructor called"<<endl;
    };
};

//当用一个对象去初始化同类的另一个对象时,类Test的复制构造函数被调用;
Test c1;
Test c2(c1);
Test c3=c1;//在定义c3时为初始化语句,非复制语句,用复制构造函数用c1初始化c2;

//如果某函数有一个是类Test的对象,那么该函数被调用时,类Test的复制构造函数被调用;
void func_02(Test a)//此处的形参对象a是被主函数中的实参初始化的,调用复制构造函数;
{

}

//如果函数的返回值是类Test的对象时,则函数返回时,类Test的复制构造函数被调用;
Test func_03()
{
    Test a(4);
    return a;//将返回的对象a***初始化***主函数中的实参,调用复制构造函数;
};

//使用Test &引用类型作为参数,不会调用复制构造函数
//如果希望确保实参的值在函数调用时不被改变,可以加上const 关键字;
Test func_04(const Test &a)//
{
    cout<<"func_04"<<endl;
}

int main()
{

    Test c4;
    c4=c1;//此语句为赋值语句,并不会调用复制构造函数,只有在定义时,才是初始化操作;
    cout<<"step_01"<<endl;

    Test a1;
    func_02(a1);
    cout<<"step_02"<<endl;

    cout<<func_03().real<<endl;
    cout<<"step_03"<<endl;

    Test a3;
    func_04(a3);
    cout<<"step_04"<<endl;
    return 0;
}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/violet_ljp/article/details/80426938