ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명품 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

    댓글

© 2018 TISTORY. All rights reserved.