요약 - Matrix 클래스
Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 104개 중 47번째.
챌린지
쉬움이 장에서 배운 모든 연산자 오버로딩 기법을 하나로 모은 Matrix 클래스를 만들어 봅시다. 산술 연산, 비교, 요소 접근 및 스트림 출력을 지원하는 모든 기능을 갖춘 행렬을 직관적인 연산자 문법으로 구현합니다.
코드는 두 파일로 구성합니다.
Matrix.h: 동적 메모리를 사용하여 정수로 이루어진 2D 배열을 관리하는Matrix클래스를 정의합니다. 행렬은 다음을 지원해야 합니다.- private 멤버: 2D 데이터를 위한
int**포인터와 행 및 열을 위한size_t멤버 - 행과 열을 인수로 받아 모든 요소를 0으로 초기화하는 생성자
- 할당된 모든 메모리를 올바르게 해제하는 소멸자
- 복사 생성자와 복사 대입 연산자 (deep copy 및 self-assignment check)
getRows()및getCols()getter (둘 다 const)- 개별 요소를 설정하는
set(row, col, value)메서드 - 요소를 가져오는
get(row, col)const 메서드
다음 연산자를 구현합니다.
- 산술: 행렬 덧셈과 뺄셈을 위한
+및-(값으로 새로운 Matrix 반환) - 비교: 두 행렬의 차원과 요소가 동일한지 확인하는
==및!= - 스트림: 행렬을 행별로 출력하는 friend function인
<<. 요소는 공백으로 구분하고 각 행은 새 줄에 출력합니다. - 첨자: 행에 대한 포인터를 반환하여
matrix[row][col]문법을 사용할 수 있게 하는[](const 및 non-const 버전 모두 제공)
산술 연산자의 경우 두 행렬의 차원이 같다고 가정합니다. 비교 연산자는 차원이 다르면
false를 반환해야 합니다.- private 멤버: 2D 데이터를 위한
main.cpp: 두 개의 2x2 행렬을 생성하고 조작할 수 있도록 입력을 읽습니다. 입력 형식은 다음과 같습니다.- 첫 번째 행렬을 위한 네 개의 정수 (행별): a00, a01, a10, a11
- 두 번째 행렬을 위한 네 개의 정수 (행별): 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(소문자)를 출력합니다.
예를 들어 Matrix A에 1 2 3 4를 입력하고 Matrix 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: 첨자 접근 결과 출력
// cout << "A[0][0]: " << ... << endl;
// cout << "A[1][1]: " << ... << endl;
return 0;
}
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 C++ 컴파일러