拷贝构造函数1.0

#include<iostream>
using namespace std;
class Copy
{
    public:Copy()
           {cout<<"I LOVE YOU!!!"<<endl;}
           Copy(int )
           {cout<<"YOU LOVE ME"<<endl;}
           ~Copy()
           {cout<<"释放"<<endl;}
    //      Copy(Copy &s)---------------------------------------------------会出现错误
    //      {
    //          cout<<"!!!!!!!!!!!!!"<<endl;}
            Copy(Copy &)
            {cout<<"???????????????????"<<endl;}
    private:


};
int main()
{
    Copy s;
    Copy s2; 
    Copy s3=s2;-------------------------------------------------实际上是调用了拷贝构造函数给,用s2给s3赋值
}

输出结果:

I LOVE YOU!!!
I LOVE YOU!!!
???????????????????
释放
释放
释放

如果把main函数中的 Copy s3=s2;改为Copy s3;s3=s2,则不会调用拷贝函数,输出结果为:

I LOVE YOU!!!
I LOVE YOU!!!
I LOVE YOU!!!
释放
释放
释放

===========================================================================

#include<iostream>
using namespace std;
class Copy
{
    public:Copy()
           {cout<<"I LOVE YOU!!!"<<endl;}
           Copy(int )
           {cout<<"YOU LOVE ME"<<endl;}
           ~Copy()
           {cout<<"释放"<<endl;}
    //      Copy(Copy &s)
    //      {
    //          cout<<"!!!!!!!!!!!!!"<<endl;}
            Copy(Copy &)
            {cout<<"???????????????????"<<endl;}

            void show()//---------------------------------------------在类中添加一个show函数
            {
                cout<<"/////////////"<<endl;}



    private:
};
void fun(Copy s4) //-------------------------------------------------添加一个fun函数
{s4.show();}


int main()
{
    Copy s;
    Copy s2; 
    Copy s3=s2;
fun(s); //--------------------------------------调用fun函数。并通过s进行赋值
}

得到结果如下:

I LOVE YOU!!!      
I LOVE YOU!!!
???????????????????      //调用了两次拷贝函数
???????????????????      
/////////////
释放
释放
释放
释放
=========================================================================
#include<iostream>
using namespace std;
class Copy
{
    public:Copy()
           {cout<<"I LOVE YOU!!!"<<endl;}
           Copy(int )
           {cout<<"YOU LOVE ME"<<endl;}
           ~Copy()
           {cout<<"释放"<<endl;}
    //      Copy(Copy &s)
    //      {
    //          cout<<"!!!!!!!!!!!!!"<<endl;}
            Copy(const Copy &)-------------一定要加const(一般都加上),因为const可以引用const和普通对象,普通不能引用const;
            {cout<<"???????????????????"<<endl;}

            void show()
            {
                cout<<"/////////////"<<endl;}



    private:
};
void fun(Copy s4) 
{s4.show();}


Copy fun_2()
{
    static Copy s4(5);
    return s4;}
    


int main()
{
    Copy s;
    Copy s2; 
    Copy s3=s2;
fun(s);

 Copy s5=fun_2();
}

结果为:

I LOVE YOU!!!
I LOVE YOU!!!
???????????????????
???????????????????
/////////////
释放-------------------------------------------------------调用的fun函数,在fun函数结束时就释放
YOU LOVE ME
???????????????????---------------------去掉static则不会输出“??????????”
释放-------------------------------------------------s5=fun_2()释放两次;
释放
释放
释放
释放


==========================================================================

C++拷贝构造函数调用途径:

1、调用对象时用一个对象初始化另外一个对象;

2、传递一个对象到子函数中;

3、返回一个静态对象时。

猜你喜欢

转载自blog.csdn.net/it8343/article/details/80463925