c++赋值符号到底能不能直接将两个对象赋值

来源:百度知道 编辑:UC知道 时间:2024/05/28 08:13:09
#include<iostream>
using namespace std;
class CComplex
{
public:
CComplex(double,double);
CComplex(CComplex &c);
CComplex add(CComplex &x);
void Print();

private:
double real;
double imag;
};
CComplex:: CComplex(double r=0,double i=0)
{
real=r;
imag=i;
cout<<"带两个参数的"<<endl;
}
CComplex:: CComplex( CComplex &c )
{
real=c.real;
imag=c.imag;

}
CComplex CComplex::add(CComplex &x)
{
CComplex y(real+x.real,imag+x.imag);
return y;
}
void CComplex::Print()
{
cout<<"("<<real<<","<<imag<<")"<<endl;
}
void f(CComplex & n)
{
co

这个程序可以编译通过啊,在 VS2008下正常编译通过并执行,不知道你有什么问题?

class A
{
private:
int m_V1;
int m_V2;
public:
A( int v1, int v2 )
{
m_V1 = v1;
m_V2 = v2;
}
A( const A& a )
{
m_V1 = a.m_V1;
m_V2 = a.m_V2;
}
public:
A& operator =( const A& a )
{
m_V1 = a.m_V1;
m_V2 = a.m_V2;
return * this;
}
};

void main()
{
A a1( 0, 0 );
A a2 = a1;
A a3( a2 );
a1 = a3;
_getch();
}

通过上面的代码,你就可以发现,当要根据一个现有变量创建新对象时,会调用拷贝构造函数。

只有当两个对象已经被创建,在对象之间赋值时,才调用赋值操作符号。

在用户没有定义拷贝构造函数和赋值操作函数时,编译器会自动生成这两个函数。

因为编译器默认的这两个函数,是属于直接内存拷贝的。
用户之所以要定义这两个函数,是因为用户在这两个操作里,需要有一些特定的操作。比如:
1、对象有很多数据成员,而需要拷贝的成员只有很少有几个,没有必要全部拷贝。
2、对象内部有指针变量,需要动态创建内存,进而进行内存拷贝,这个属于自定义操作。
3、用户需要在这些函数里做其它跟踪操作。

肯定能。面向对象的设计,对象就如同一个普通变量一样可进行赋值操作。请看举例代码:

//#include "stdafx.