본문 바로가기

Programming/C & C++

operator overloading

Struct를 만들고(complex<double> 행렬 2x2 관련 구조체)

해당 구조체를 곱했을때에 대한 계산을 위하여 연산자 * 오버로딩.

 

첫시도 -

CustomStruct A;
CustomStruct B;
CustomStruct C;

CustomStruct& operator*(const CustomStruct& _b, const CustomStruct& _t)
{ 
	complex<double> _rA = (_b.a * _t.a) + (_b.b * _t.c); 
	complex<double> _rB = (_b.a * _t.b) + (_b.b * _t.d); 
	complex<double> _rC = (_b.c * _t.a) + (_b.d * _t.c); 
	complex<double> _rD = (_b.c * _t.b) + (_b.d * _t.d); 
	return CustomStruct(_rA, _rB, _rC, _rD); 
}

A*B는 정상 출력이 되나, A*B*C는 되지 않는다.

 

변경 -

(구조체 내에서 inLine으로 처리)

inline CustomStruct& operator*(const CustomStruct& _t)
{ 
	a = (a * _t.a) + (b * _t.c); 
	b = (a * _t.b) + (b * _t.d); 
	c = (c * _t.a) + (d * _t.c); 
	d = (c * _t.b) + (d * _t.d); 
	return *this; 
}