명품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;
}
반응형