copy构造函数的4个应用场景

一.构造函数总结

构造函数是c++中用于初始化对象状态的特殊函数

构造函数在对象创建时自动被调用(默认调用),隐身调用

构造函数和普通成员函数都遵循重载规则

拷贝构造函数是对象正确初始化的重要保证

必要时,必须手工编写拷贝构造函数

二.构造函数的应用

自动调用:一般情况下,c++编译器会自动调用构造函数

手动调用:在一些情况下则需要手工调用构造函数

三.构造函数有三种

有参构造函数,默认构造函数,拷贝构造函数

四.有参构造函数调用的三种方法

class Test

{

public:

//有参构造函数

Test(int a)

{

m_a=a;

}

//无参构造函数

Test()

{

m_a=0;

}


//四中应用场景

//赋值构造函数 copy构造函数

Test(const Test &obj)

{

}

public:

void print()

{

cout<<"m_a"<<m_a<<endl;

}

protected:

private:

int m_a;

};

void main()

{

//括号法

Test t1(10);//c++编译器自动调用这个类的有参构造函数

t1.print();

//=

Test t2=20;//c++编译器自动调用这个类的有参构造函数

t2.print();

//

Test t3=Test(30);//程序员手工的调用构造函数,进行对象的初始化

t3.print();

system("pause");

}

构造函数用来完成对象的构造(初始化)工作。

五.赋值构造函数(copy构造函数)和=操作是两个不同的概念

赋值构造函数(copy构造函数)的四个应用场景

void main()

{

Test t1;

t1.setA(10);

Test t3;

//copy构造函数第一种场景

1.赋值构造函数和=操作是两个不同的概念

2.赋值构造函数 copy构造函数,也是构造函数

Test t2=t1;//对象t2的初始化

cout<<t2.getA()<<endl;

//在这个场景下,t2被创建,并且自动的调用copy构造函数

3.当我们没有编写copy构造函数(赋值构造函数)时,c++编译器对自动为我们提供一个copy构造函数,执行的是浅copy

t2=t2;//是对象的=操作

system("pause");


}


//copy构造函数第二种场景

void main()

{

Test t1;

t1.setA(10);

Test t2(t1);

system("pause");


}


//copy构造函数第三种场景

#include "iostream"
using namespace std;


class Location
{
public:
Location( int xx = 0 , int yy = 0 )
{X = xx ;  Y = yy ;  cout << "Constructor Object.\n" ;}


    Location( const Location & p )    //复制构造函数;拷贝构造函数
{X = p.X ;  Y = p.Y ;   cout << "Copy_constructor called." << endl ;  }


~Location() { cout << X << "," << Y << " Object destroyed." << endl ; }
int  GetX () { return X ; }
int GetY () { return Y ; }


private :   int  X , Y ;
} ;
void f ( Location  p )
{
cout << "Funtion:" << p.GetX() << "," << p.GetY() << endl ;
}
void playobjmain()
{
Location A ( 1, 2 ) ;
f ( A ) ;
}


int main()
{
playobjmain();
//system("pause");
return 0;
}


//copy构造函数第四种应用场景

#include "iostream"
using namespace std;


class Location
{
public:
Location( int xx = 0 , int yy = 0 )
{
X = xx ;  Y = yy ;  cout << "Constructor Object.\n" ;
}
Location( const Location & p )    //复制构造函数
{
X = p.X ;  Y = p.Y ;   cout << "Copy_constructor called." << endl ;  }
~Location() { cout << X << "," << Y << " Object destroyed." << endl ; }
int  GetX () { return X ; } int GetY () { return Y ; }
private :   int  X , Y ;
} ;


void f ( Location  p )
{
cout << "Funtion:" << p.GetX() << "," << p.GetY() << endl ;
}
// void playobjmain()
// {
// Location A ( 1, 2 ) ;
// f ( A ) ;
// }
Location g()
{
Location A(1, 2);
return A;
}
void main101()
{
Location B;
B = g();//g()返回一个匿名对象


}


int main()
{
main101();
//system("pause");
return 0;
}






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值