c++ 질문이 있습니다 ㅠ

쿠키앤 크림 (쿠앤크)@Google의 이미지

 #include <iostream>
using namespace std;
class complex{
protected :
	int real;
	int image;	
public:
	complex(int r=0,int i=0);
	friend istream &operator>>(istream &in,complex &a);
	friend ostream &operator<<(ostream &os,complex &a);
	friend complex operator+(complex left,complex right);
 
};
complex::complex(int r,int i) : real(r),image(i)
{}
complex operator+(complex left,complex right)
{
	complex result;
	result.real=left.real+right.real;
	result.real=left.image+right.image;
	return result;
}
ostream &operator<<(ostream &os,complex &a)
{
	os<<a.real<<"+"<<a.image<<"i";
	return os;
}
istream &operator>>(istream &in,complex &a)
{
	cout<<endl<<"복소수 입력"<<endl<<endl;
	cout<<"실수부 입력 = ";
	in>>a.real;
	cout<<"허수부 입력 = ";
	in>>a.image;
	return in;
}
 
class matrix : public complex{
public :
	complex a;
	ostream &operator=(ostream &os,complex &b);
};
void main()
{
	matrix x[3][3];
	matrix y[3][3];
	matrix z[3][3];
	complex a[3][3];
	cout<<"첫번째 행렬 입력"<<endl;
	for(int r=0;r<3;r++){
		for(int i=0;i<3;i++){
	cin>>x[r][i];
		}
	}
	cout<<endl<<"두번째 행렬 입력"<<endl;
	for(int r=0;r<3;r++){
		for(int i=0;i<3;i++){
	cin>>y[r][i];
		}
	}
	cout<<endl;
	for(int r=0;r<3;r++){
		for(int i=0;i<3;i++){
			cout<<x[r][i]<<"\t";
		}
		cout<<endl;
	}
	cout<<endl;
	for(int r=0;r<3;r++){
		for(int i=0;i<3;i++){
			cout<<y[r][i]<<"\t";
		}
		cout<<endl;
	}
	for(int r=0;r<3;r++){
		for(int i=0;i<3;i++){
			a[r][i]=x[r][i]+y[r][i];
			z[r][i]=a[r][i];
		}
	}
 
 
}

3x3 행렬인데 복소수가 있는 행렬 두개의 사칙연산을 만들고있습니다.
앉아서 씨름하고 있는데 여기서 막히네요 ㅠㅠ 도움을 청합니다..
연산자 오버로딩을 꼭 써야하는데요 matrix z의 원소에 complex a를 넣으려고 하는데
=를 따로 오버로딩을 해야될거같은데 잘 모르겠네요 ㅠㅠ

 의 이미지

이것저것 문제가 많아 보이는 C++ 코드입니다만, 과제물이라는 게 너무 명백하니 따로 드릴 말씀은 없군요.

일단 바라시는 내용에 대한 레퍼런스를 드립니다. 대입 연산자를 제대로 작성한다면 동작하게 만들 수는 있을 겁니다.

http://en.cppreference.com/w/cpp/language/copy_assignment

세벌의 이미지