ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명품 C++ 7장 7번
    C++ 2018. 11. 3. 14:07

    7. 2차원 행렬을 추상화한 Matrix 클래스를 활용하는 다음 코드가 있다.


    int main() {
        Matrix a(4, 3, 2, 1), b;
        int x[4], y[4] = { 1,2,3,4 }; // 2차원 행렬의 4 개의 원소 값
        a >> x; // a의 각 원소를 배열 x에 복사, x[]는 {4,3,2,1}
        b << y; // 배여 y의 원소 값을 b의 각 원소에 설정
        for (int i = 0; i < 4; ++i) cout << x[i] << ' '; // x[] 출력
        cout << endl;
        b.show();
    }


    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>>(int x[]);
        Matrix& operator<<(int x[]);
    };
    Matrix& Matrix::operator>>(int x[]) {
        for (int i = 0; i < 4; ++i) x[i] = this->x[i];
        return *this;
    }
    Matrix& Matrix::operator<<(int x[]) {
        for (int i = 0; i < 4; ++i) this->x[i] = x[i];
        return *this;
    }
    int main() {
        Matrix a(4, 3, 2, 1), b;
        int x[4], y[4] = { 1,2,3,4 }; // 2차원 행렬의 4 개의 원소 값
        a >> x; // a의 각 원소를 배열 x에 복사, x[]는 {4,3,2,1}
        b << y; // 배여 y의 원소 값을 b의 각 원소에 설정
        for (int i = 0; i < 4; ++i) cout << x[i] << ' '; // x[] 출력
        cout << endl;
        b.show();
    }


    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 &op,int x[]);
        friend Matrix& operator<<(Matrix &op,int x[]);
    };
    Matrix& operator>>(Matrix &op ,int x[]) {
        for (int i = 0; i < 4; ++i) x[i] = op.x[i];
        return op;
    }
    Matrix& operator<<(Matrix &op ,int x[]) {
        for (int i = 0; i < 4; ++i) op.x[i] = x[i];
        return op;
    }
    int main() {
        Matrix a(4, 3, 2, 1), b;
        int x[4], y[4] = { 1,2,3,4 }; // 2차원 행렬의 4 개의 원소 값
        a >> x; // a의 각 원소를 배열 x에 복사, x[]는 {4,3,2,1}
        b << y; // 배여 y의 원소 값을 b의 각 원소에 설정
        for (int i = 0; i < 4; ++i) cout << x[i] << ' '; // x[] 출력
        cout << endl;
        b.show();
    }


    실행결과



    << >> 연산에서는 참조를 리턴해야합니다.

    'C++' 카테고리의 다른 글

    명품 C++ 7장 9번  (0) 2018.11.03
    명품 C++ 7장 8번  (0) 2018.11.03
    명품 C++ 7장 6번  (0) 2018.11.03
    명품 C++ 7장 5번  (0) 2018.11.03
    명품 C++ 7장 1번 2번 3번 4번  (0) 2018.11.03

    댓글

© 2018 TISTORY. All rights reserved.