요약 - Matrix 클래스
Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 104개 중 47번째.
챌린지
쉬움이 장에서 배운 모든 연산자 오버로딩 기술을 하나로 모으는 Matrix 클래스를 만들어 보겠습니다. 직관적인 연산자 구문을 통해 산술 연산, 비교, 요소 접근 및 스트림 출력을 지원하는 완전한 기능을 갖춘 행렬을 만들게 됩니다.
코드는 다음 두 개의 파일로 구성됩니다:
Matrix.h: 동적 메모리를 사용하여 정수의 2차원 배열을 관리하는Matrix클래스를 정의합니다. 행렬은 다음을 지원해야 합니다:- Private 멤버: 2차원 데이터를 위한
int**포인터, 행과 열을 위한size_t멤버 - 행과 열을 인자로 받아 모든 요소를 0으로 초기화하는 생성자
- 할당된 모든 메모리를 적절히 해제하는 소멸자
- 복사 생성자 및 복사 대입 연산자 (자기 대입 검사를 포함한 깊은 복사)
- Getter인
getRows()및getCols()(둘 다 const) - 개별 요소를 설정하는
set(row, col, value)메서드 - 요소를 검색하는
get(row, col)const 메서드
다음 연산자들을 구현하세요:
- 산술 연산: 행렬 덧셈과 뺄셈을 위한
+및-(새로운 Matrix를 값으로 반환) - 비교 연산: 두 행렬의 크기가 같고 요소가 동일한지 확인하는
==및!= - 스트림 연산: 행렬을 행 단위로 출력하며, 요소는 공백으로 구분하고 각 행은 줄바꿈으로 구분하는 friend 함수
<< - 첨자 연산: 행에 대한 포인터를 반환하여
matrix[row][col]구문을 사용할 수 있게 하는[](const 및 non-const 버전 모두 제공)
산술 연산자의 경우, 두 행렬의 크기가 같다고 가정합니다. 비교 연산자는 크기가 다를 경우
false를 반환해야 합니다.- Private 멤버: 2차원 데이터를 위한
main.cpp: 입력을 읽어 두 개의 2x2 행렬을 생성하고 조작합니다. 입력 형식은 다음과 같습니다:- 첫 번째 행렬을 위한 4개의 정수 (행 단위): a00, a01, a10, a11
- 두 번째 행렬을 위한 4개의 정수 (행 단위): b00, b01, b10, b11
두 개의
Matrix객체(각각 2행 2열)를 생성하고,set()메서드를 사용하여 값을 채운 다음, 구현한 연산자들을 시연하세요:출력 형식:
Matrix A: <row0> <row1> Matrix B: <row0> <row1> A + B: <row0> <row1> A - B: <row0> <row1> A == B: <true/false> A != B: <true/false> A[0][0]: <value> A[1][1]: <value>각 행의 요소는 단일 공백으로 구분하여 표시해야 합니다. 비교 결과는
true또는false(소문자)로 출력하세요.
예를 들어, 행렬 A에 대해 1 2 3 4를 입력하고 행렬 B에 대해 5 6 7 8을 입력한 경우:
Matrix A:
1 2
3 4
Matrix B:
5 6
7 8
A + B:
6 8
10 12
A - B:
-4 -4
-4 -4
A == B: false
A != B: true
A[0][0]: 1
A[1][1]: 4입력 변환에는 std::stoi()를 사용하세요. 연산자의 일관성을 유지하기 위해 ==를 사용하여 !=를 구현하는 것을 잊지 마세요. 헤더 파일에 헤더 가드(header guards)를 포함하는 것도 잊지 마세요.
직접 해보기
#include <iostream>
#include <string>
#include "Matrix.h"
using namespace std;
int main() {
// 첫 번째 행렬(2x2)에 대한 입력 읽기: a00, a01, a10, a11
int a00, a01, a10, a11;
cin >> a00 >> a01 >> a10 >> a11;
// 두 번째 행렬(2x2)에 대한 입력 읽기: b00, b01, b10, b11
int b00, b01, b10, b11;
cin >> b00 >> b01 >> b10 >> b11;
// TODO: 두 개의 Matrix 객체 생성 (각각 2행 2열)
// TODO: set() 메서드를 사용하여 행렬 채우기
// TODO: Matrix A 출력
// cout << "Matrix A:" << endl;
// 행렬을 출력하기 위해 << 연산자 사용
// TODO: Matrix B 출력
// cout << "Matrix B:" << endl;
// 행렬을 출력하기 위해 << 연산자 사용
// TODO: A + B 출력
// cout << "A + B:" << endl;
// TODO: A - B 출력
// cout << "A - B:" << endl;
// TODO: 비교 결과 출력
// cout << "A == B: " << (true/false를 위해 삼항 연산자 사용) << endl;
// cout << "A != B: " << (true/false를 위해 삼항 연산자 사용) << endl;
// TODO: 첨자 접근(subscript access) 결과 출력
// cout << "A[0][0]: " << ... << endl;
// cout << "A[1][1]: " << ... << endl;
return 0;
}