1. 문제

 

5. 2차원 행렬을 추상화한 Matrix 클래스를 작성하고, show() 멤버 함수와 다음 연산이 가능하도록 연산자를 모두 구현하라.

 

(1) 연산자 함수를 Matrix의 멤버 함수로 구현하라.

 

 

2. 결과

 

 

3. 코드

 


#include <iostream>
using namespace std;

class Matrix {
	int duo[2][2];
public :
	Matrix(int a=0, int b=0, int c=0, int d=0) {
		duo[0][0] = a; duo[0][1] = b;
		duo[1][0] = c; duo[1][1] = d;
	}
	Matrix operator + (Matrix b) { 
		Matrix temp;
		for(int i=0; i<2; i++) {
			for(int j=0; j<2; j++) 
				temp.duo[i][j] = duo[i][j] + b.duo[i][j];
		}
		return temp;
	}
	Matrix operator += (Matrix b) {
		for(int i=0; i<2; i++) {
			for(int j=0; j<2; j++) 
				duo[i][j] += b.duo[i][j];
		}
		return *this;
	}
	bool operator ==(Matrix b) {
		int count=0;
		for(int i=0; i<2; i++) {
			for(int j=0; j<2; j++) 
				if( duo[i][j] == b.duo[i][j] ) count++;
		}
		if( count == 4) return true;
		else return false;
	}
	void show() {
		cout << "Matrix = { ";
		for(int i=0; i<2; i++) {
			for(int j=0; j<2; j++) 
				cout << duo[i][j] << ' ';
		}
		cout << '}' << endl;
	}
};

int main() {
	Matrix a(1,2,3,4), b(2,3,4,5), c;
	c = a + b;
	a += b;
	a.show(); b.show(); c.show();
	if( a == c)
		cout << "a and c are the same" << endl;
}
C++

 

 

4. 설명

 

  Matrix 클래스에서 구현해야 할 멤버들은 "+", "+=", "==" 와 show() 멤버 함수, 생성자 입니다.

 

멤버 변수 duo는 2차원 배열로 선언하였습니다. 일차원 배열로 선언하여 사용했으면 더 코드가 짧아졌겠지만 2차원 행렬을 추상화한 클래스이므로 2차원 배열로 선언하였습니다.

 

 

 

"+" 함수에서는 Matrix 변수 하나를 선언한 후 2차원 행렬에서 같은 위치에 있는 값끼리 더해주어서 2차원 행렬끼리의 "+"이 일어나는 것처럼 구현해 줍니다.
 
"+="함수에서는 Matrix 변수 하나를 입력받아서 2차원 행렬 같은 위치에 있는 요소들끼리 += 연산을 실행하도록 한후 return *this; 로 자신을 return 해줍니다.
 
"==" 함수에서는 int형 변수 하나를 선언하여서 2차원 행렬들 각각 같은 위치에 있는 값들이 같은지를 비교하여서 true와 false 중 return하도록 하였습니다. 이렇게 하지 않아도 
 
if( duo[0][0] == b.duo[0][0] && duo[0][1] == b.duo[0][1] && ...  ) return true;
else return false;
 
이처럼 구현할 수도 있습니다.
 
 
show() 멤버 함수는 예시 출력 결과에서 보듯이 2차원 행렬 요소들을 출력하도록 구현합니다.
 

 


 

 

 

1. 문제

 

5. 2차원 행렬을 추상화한 Matrix 클래스를 작성하고, show() 멤버 함수와 다음 연산이 가능하도록 연산자를 모두 구현하라.

 

(2) 연산자 함수를 Matrix의 프렌드 함수로 구현하라.

 

 

2. 결과

 

 

 

3. 코드

 


#include <iostream>
using namespace std;

class Matrix {
	int duo[2][2];
public :
	Matrix(int a=0, int b=0, int c=0, int d=0) {
		duo[0][0] = a; duo[0][1] = b;
		duo[1][0] = c; duo[1][1] = d;
	}
	friend Matrix operator + (Matrix a, Matrix b);
	friend void operator += (Matrix& a, Matrix b);
	friend bool operator ==(Matrix a, Matrix b);
	void show() {
		cout << "Matrix = { ";
		for(int i=0; i<2; i++) {
			for(int j=0; j<2; j++) 
				cout << duo[i][j] << ' ';
		}
		cout << '}' << endl;
	}
};
Matrix operator + (Matrix a, Matrix b) { 
		Matrix temp;
		for(int i=0; i<2; i++) {
			for(int j=0; j<2; j++) 
				temp.duo[i][j] = a.duo[i][j] + b.duo[i][j];
		}
		return temp;
	}
void operator += (Matrix& a, Matrix b) {
		for(int i=0; i<2; i++) {
			for(int j=0; j<2; j++) 
				a.duo[i][j] += b.duo[i][j];
		}
		
	}
bool operator ==(Matrix a,Matrix b) {
		int count=0;
		for(int i=0; i<2; i++) {
			for(int j=0; j<2; j++) 
				if( a.duo[i][j] == b.duo[i][j] ) count++;
		}
		if( count == 4) return true;
		else return false;
	}

int main() {
	Matrix a(1,2,3,4), b(2,3,4,5), c;
	c = a + b;
	a += b;
	a.show(); b.show(); c.show();
	if( a == c)
		cout << "a and c are the same" << endl;
}
C++

 

 

4. 설명

 

  프렌드 함수와 멤버 함수로 구현하는 방법은 추가적으로 매개변수로 입력받은 후 이용하는 점만 다르므로 굳이 또 다시 설명하지는 않겠습니다.

 

단, "+=" 함수에서는 (Matrix &a, Matrix b) 로 a를 참조 변수로 입력받아야만 함수가 끝나도 덧셈을 한 후 a의 저장된 값이 main함수의서 유지됩니다.

 

+ Recent posts