반응형

Language 78

📌예제 - 온라인 쇼핑몰 주문 관리 시스템

문제: 온라인 쇼핑몰 주문 관리 시스템1. 프로그램 개요온라인 쇼핑몰에서 상품과 주문을 관리하는 프로그램을 작성하세요.주요 기능은 상품 등록, 주문 생성, 주문 조회, 전체 주문 요약, 데이터 저장/로드입니다.2. 클래스 구조2-1. Product 클래스상품 정보 관리속성:상품ID (int)이름 (std::string)가격 (double) 2-2. Order 클래스주문 정보 관리속성:주문ID (int)주문한 상품 리스트 (상품ID → 수량)총 금액 계산기능:주문 추가주문 총액 계산가상 함수 printSummary() 구현RegularOrder와 ExpressOrder에서 다르게 출력 2-3. Customer 클래스고객 정보 관리속성:고객ID (int)이름 (std::string)주문 리스트 (Order ..

Language/C++ 2025.11.01

📌예제 - 은행 계좌 관리 시스템 (고급 구현)

아래 요구사항을 만족하는 은행 계좌 관리 프로그램을 작성하시오.🏗️ 클래스 구조Account 클래스는 추상 클래스(순수 가상 함수 포함) 이어야 한다.NormalAccount, HighCreditAccount, SavingsAccount 클래스를 파생시킨다.⚠️ 예외 처리AccountException 을 기반으로잘못된 입출금 요청 시 예외를 발생시키고, 호출부에서 처리한다.🔄 형변환 연산자 활용모든 계좌 중 SavingsAccount 만 출력하는 기능을 dynamic_cast 로 구현한다.📚 STL 활용모든 계좌는 std::vector> 로 관리한다.계좌 검색 시 std::find_if 와 람다 표현식을 사용한다.💾 파일 입출력프로그램 종료 시, 모든 계좌 정보를 accounts.txt 파일에 저..

Language/C++ 2025.10.31

📌 Chapter 14 - 형변환 연산자 (C++ Casting Operators)

C++에서는 C 언어에서 사용하던 전통적인 형변환 방식((자료형)값)도 여전히 지원한다. 그러나 C 스타일 형변환은 너무 포괄적이고, 안전성이 떨어진다는 단점이 있다.즉, 맞는 변환인지 아닌지를 컴파일러가 제대로 검사하지 못한다는 것이다.예를 들어, int* 같은 포인터를 float 같은 기본형으로도 바꿀 수 있으며, 이 경우 프로그램의 안정성은 전적으로 프로그래머의 책임이다.이를 보완하기 위해 C++에서는 4가지 형변환 연산자를 제공한다:reinterpret_castconst_caststatic_castdynamic_cast아래에서 각각의 특징과 사용법을 살펴본다.1. C 스타일 형변환의 한계C 스타일 형변환· (자료형)값 형태를 사용한다.· 컴파일러는 변환이 합법적인지 여부를 검사하지 않는다.· 상위..

Language/C++ 2025.10.30

📌 Chapter 13 - 예외처리 (Exception Handling)

C++에서의 예외 처리(Exception Handling)는 프로그램 실행 중 발생할 수 있는 비정상 상황을 안전하게 처리하기 위한 기법이다.단순한 if문 조건 검사가 아닌 try-catch 구조를 통해 예외를 체계적으로 관리할 수 있다. 이번 장에서는 예외의 기본 개념부터 예외 클래스, 예외 상속, 예외 처리 흐름, 예외 던지기까지 차례대로 정리한다.1. 예외(Exception)의 개념정의예외(Exception)란 프로그램 실행 도중 발생하는 문제 상황이다.문법 오류(Syntax Error)는 예외가 아니다. (컴파일 단계에서 걸러짐)예외는 프로그램의 논리와 맞지 않는 상황에서 발생한다.예외는 throw로 발생시키고, catch에서 처리한다.2. 예외 처리 방법1) if문을 통한 단순 예외 처리가장 단..

Language/C++ 2025.10.28

📌 Chapter 12 - 클래스 템플릿

1. 클래스 템플릿 (Class Template)1) 클래스 템플릿· 클래스 템플릿은 클래스를 일반화한 정의로서, 클래스의 동작은 고정하고 자료형을 나중에 결정하도록 하는 기법이다.· 클래스 템플릿을 기반으로 컴파일러가 생성하는 실제 클래스를 템플릿 클래스(template class)라고 한다.· 서로 다른 자료형으로 같은 구조의 클래스를 여러 번 정의할 필요를 줄이기 위해 클래스 템플릿을 사용한다.· 문법은 template 또는 template 형식을 사용한다.· 템플릿 인자 이름(T)은 원하는 이름으로 변경해서 사용한다.⭕ 추가 설명1️⃣ 템플릿 정의는 컴파일 시점에 타입별로 인스턴스화(실제 클래스 생성) 된다.2️⃣ 템플릿으로 한 번 정의하면 다양한 타입에 대해 같은 구현을 재사용할 수 있다.3..

Language/C++ 2025.10.24

📌 Chapter 12 - 템플릿

1. 함수 템플릿 (Function Template)· 템플릿은 '틀'이라는 의미이다.· 함수 템플릿은 함수의 동작(알고리즘)은 고정되어 있고, 실제 자료형은 호출 시점에 결정한다.· 문법은 template 또는 template 형태를 사용한다.· typename과 class는 템플릿 매개변수 선언에서 동일한 의미를 사용한다.· 템플릿 매개변수 이름은 T 외의 다른 이름으로 변경해서 사용할 수 있다.· 컴파일러는 함수 템플릿으로부터 실제 타입에 맞춘 함수를 생성(인스턴스화) 한다.⭕ 상세 보충1️⃣ 컴파일 시점에 타입별로 함수가 생성된다.2️⃣ 한 번 생성된 함수는 동일한 시그니처에 대해 재생성하지 않으므로 실행 시 성능 저하는 없다.3️⃣ 템플릿 인스턴스화 때문에 컴파일 시간이 늘어날 수 있다.1)..

Language/C++ 2025.10.24

📌 Chapter 11 - string

1. string 클래스string은 C++ 표준 라이브러리에서 제공하는 문자열 처리 클래스이다.문자열을 사용하기 위해서는 반드시 **#include **을 포함해야 한다.문자열을 객체로 다루므로, C 언어의 char 배열보다 훨씬 직관적이고 안전하다.주요 특징· 문자열 결합: + 연산자로 문자열을 합칠 수 있다.· 문자열 누적: += 연산자로 기존 문자열에 이어 붙일 수 있다.· 비교 연산자 지원: ==, !=, 연산으로 문자열 비교가 가능하다.· 대입 연산자 지원: =를 사용하여 문자열을 쉽게 복사할 수 있다.· 길이 확인: .size() 또는 .length() 멤버 함수를 사용한다.⭕ 예시string a = "hello";string b = "world";string c = a + b; // ..

Language/C++ 2025.10.11

📌 Chapter 10 - 나머지 연산자 오버로딩

1. new 연산자 오버로딩1) new 연산자의 기본 개념new 연산자는 다음의 작업을 수행한다.· 메모리 공간의 할당· 생성자 호출· 자료형에 맞는 주소 값 형 변환new 연산자를 오버로딩할 경우, 메모리 공간의 할당을 직접 책임져야 한다.반환형은 반드시 void* 형이어야 한다.매개변수는 size_t 형을 사용한다.⭕ size_t는 typedef unsigned int size_t;로 정의된 자료형이며, 0 이상의 정수를 표현한다.new 연산자가 호출되면:1️⃣ 필요한 메모리 크기를 계산한다.2️⃣ operator new() 함수가 호출되고, 계산된 크기를 인자로 전달한다. (단위: byte)3️⃣ operator new()가 주소값을 반환하면, 컴파일러가 해당 주소에 대해 생성자 호출 및 초기화를 ..

Language/C++ 2025.09.16

📌 Chapter 10 - 첨자 연산자 오버로딩 (Subscript Operator)

1. 첨자 연산자란?1) 기본 배열의 문제점예int arr[5];라고 하면, 숫자 5개를 담을 수 있는 배열이 생긴다.이 배열을 사용할 때 경계를 검사하지 않는다.⚠️ 예시:int arr[5];cout // 이상한 값 출력, 프로그램이 위험해질 수 있음arr[-1]처럼 존재하지 않는 칸을 참조해도 컴파일은 되고 실행도 된다.하지만 컴퓨터 메모리에서 엉뚱한 값을 읽거나 프로그램이 터질 수 있다.2) operator[]란?[ ]를 사용자가 만든 함수로 바꿔서 예방할 수 있다. → 첨자 연산자 오버로딩즉, arrEx[2]라고 쓰면, 사실 내부적으로는 arrEx 객체의 operator[] 함수가 호출되어 2번째 칸의 위치(참조값)를 가져오는 과정이다.✅ 핵심:operator 뒤에는 반드시 대괄호 []를 붙여..

Language/C++ 2025.09.09

📌 Chapter 10 - 기본 대입 연산자 오버로딩

1. 기본(Default) 대입 연산자1) 자동 생성되는 기본 대입 연산자· 동일한 자료형의 두 객체 간에는 대입 연산(=) 이 가능하다.· 사용자가 별도로 정의하지 않으면, 컴파일러가 자동으로 기본 대입 연산자를 생성한다.· 기본 대입 연산자는 얕은 복사(Shallow Copy) 방식으로 동작한다. · 얕은 복사란 멤버 변수를 단순히 복사하는 것으로, 포인터 멤버가 있는 경우 주소 값만 복사된다.2) 얕은 복사의 문제점 ⚠️· 객체가 동적 할당을 통해 메모리를 사용한다면 얕은 복사로 인해 문제가 발생한다.· 예를 들어, 두 객체가 서로 다른 문자열을 참조하는 경우를 살펴보자.Ex ex1; // 객체 ex1 생성Ex e..

Language/C++ 2025.09.08
반응형