명품C++프로그래밍

명품 C++ Programming 실습문제 7장 6번

anycoding 2021. 5. 20. 20:19
반응형

문제

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

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 same " << endl;
}

 

결과

Matrix = { 3 5 7 9 }

Matrix = { 2 3 4 5 }

Matrix = { 3 5 7 9 }

a and c are the same

 

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

#include<iostream>
using namespace std;
class Matrix {
	int a, b, c, d;
public:
	Matrix() {};
	Matrix(int a, int b, int c, int d);
	void show();
    Matrix& operator+(Matrix& a);
    Matrix& operator+=(Matrix& a);
    bool operator==(Matrix b);
};

Matrix::Matrix(int a, int b, int c, int d)
{
	this->a = a;
	this->b = b;
	this->c = c;
	this->d = d;
}

void Matrix::show()
{
	cout << "Matrix = { " << this->a << " " << this->b << " " << this->c << " " << this->d << " }" << endl;
}

Matrix& Matrix::operator+(Matrix& a)
{
	Matrix b;
	b.a = this->a + a.a;
	b.b = this->b + a.b;
	b.c = this->c + a.c;
	b.d = this->d + a.d;
	return b;
}

Matrix& Matrix::operator+=(Matrix& a)
{
	this->a += a.a;
	this->b += a.b;
	this->c += a.c;
	this->d += a.d;
	return *this;
}

bool Matrix::operator==(Matrix b)
{
	if (this->a == b.a && this->b == b.b && this->c == b.c && this->d == b.d)
		return true;
	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 same " << endl;
}

 

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

#include<iostream>
using namespace std;
class Matrix {
	int a, b, c, d;
public:
	Matrix() {};
	Matrix(int a, int b, int c, int d);
	void show();
    friend Matrix operator+(Matrix a, Matrix b);
	friend Matrix operator+=(Matrix& a, Matrix b);
	friend bool operator==(Matrix a, Matrix b);
};
Matrix::Matrix(int a, int b, int c, int d)
{
	this->a = a;
	this->b = b;
	this->c = c;
	this->d = d;
}
void Matrix::show()
{
	cout << "Matrix = { " << this->a << " " << this->b << " " << this->c << " " << this->d << " }" << endl;
}
Matrix operator+(Matrix a, Matrix b)
{
	Matrix c;
	c.a = a.a + b.a;
	c.b = a.b + b.b;
	c.c = a.c + b.c;
	c.d = a.d + b.d;
	return c;
}
Matrix operator+=(Matrix& a, Matrix b)
{
	a.a += b.a;
	a.b += b.b;
	a.c += b.c;
	a.d += b.d;
	return a;
}
bool operator ==(Matrix a, Matrix b)
{
	if (a.a == b.a && a.b == b.b && a.c == b.c && a.d == b.d)
		return true;
	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 same " << endl;
}
반응형