-
명품 C++ 7장 6번C++ 2018. 11. 3. 13:56
6. 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 the same" << endl;}1) 연산자 함수를 Matrix의 멤버 함수로 구현하라
소스코드
#include <iostream>using namespace std;class Matrix {int x[4];public:Matrix() { for (int i = 0; i < 4; ++i) x[i] = 0; }Matrix(int x1, int x2, int x3, int x4) {x[0] = x1; x[1] = x2; x[2] = x3; x[3] = x4;}void show() {cout << "Matrix = { ";for (int i = 0; i < 4; ++i)cout << x[i] << ' ';cout << "}" << endl;}Matrix operator+(Matrix op2);Matrix& operator+=(Matrix op2);bool operator==(Matrix op2);};Matrix Matrix::operator+(Matrix op2) {Matrix tmp;for (int i = 0; i < 4; ++i)tmp.x[i] = this->x[i] + op2.x[i];return tmp;}Matrix& Matrix::operator+=(Matrix op2) {for (int i = 0; i < 4; ++i)this->x[i] += op2.x[i];return *this;}bool Matrix::operator==(Matrix op2) {for (int i = 0; i < 4; ++i) {if (this->x[i] != op2.x[i])return false;}return true;}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;}2) 연산자 함수를 Matrix의 프렌드 함수로 구현하라.
소스코드
#include <iostream>using namespace std;class Matrix {int x[4];public:Matrix() { for (int i = 0; i < 4; ++i) x[i] = 0; }Matrix(int x1, int x2, int x3, int x4) {x[0] = x1; x[1] = x2; x[2] = x3; x[3] = x4;}void show() {cout << "Matrix = { ";for (int i = 0; i < 4; ++i)cout << x[i] << ' ';cout << "}" << endl;}friend Matrix operator+(Matrix op1,Matrix op2);friend Matrix& operator+=(Matrix& op1, Matrix op2);friend bool operator==(Matrix op1, Matrix op2);};Matrix operator+(Matrix op1, Matrix op2) {Matrix tmp;for (int i = 0; i < 4; ++i)tmp.x[i] = op1.x[i] + op2.x[i];return tmp;}Matrix& operator+=(Matrix &op1, Matrix op2) {for (int i = 0; i < 4; ++i)op1.x[i] += op2.x[i];return op1;}bool operator==(Matrix op1, Matrix op2) {for (int i = 0; i < 4; ++i) {if (op1.x[i] != op2.x[i])return false;}return true;}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++' 카테고리의 다른 글
명품 C++ 7장 8번 (0) 2018.11.03 명품 C++ 7장 7번 (0) 2018.11.03 명품 C++ 7장 5번 (0) 2018.11.03 명품 C++ 7장 1번 2번 3번 4번 (0) 2018.11.03 명품 C++ 6장 Open Challenge (0) 2018.11.02