본문 바로가기
programming/명품 C++ programming

명품 C++ programming 실습 문제 7장 7번

by doachy 2020. 8. 16.

문제.

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();
}

댓글