중급 프로젝트
1. STL 기반 주소록
STL(Standard Template Library)을 사용하여 주소록 프로그램을 만들 수 있습니다. 이 프로그램은 사용자 입력을 받아 이름, 전화번호, 이메일 등의 정보를 저장하고, 저장된 정보를 출력하는 기능을 포함합니다.
1.1. 프로젝트 구성
- 사용자 정의 클래스와 STL의 vector를 활용
- 주소록 항목을 구조체로 정의
- 사용자 인터페이스: 주소록에 항목 추가, 삭제, 출력 기능 제공
1.2. 코드 예시
#include <iostream>
#include <vector>
#include <string>
struct Contact {
std::string name;
std::string phone;
std::string email;
};
class AddressBook {
public:
void addContact(const std::string& name, const std::string& phone, const std::string& email) {
contacts.push_back({name, phone, email});
}
void displayContacts() const {
for (const auto& contact : contacts) {
std::cout << "Name: " << contact.name << ", Phone: " << contact.phone << ", Email: " << contact.email << std::endl;
}
}
private:
std::vector contacts;
};
int main() {
AddressBook book;
book.addContact("John Doe", "123-4567", "john@example.com");
book.addContact("Jane Smith", "987-6543", "jane@example.com");
book.displayContacts();
return 0;
}
📌 Tip: STL의
std::vector
를 사용하면 동적 배열을 쉽게 관리할 수 있습니다. 추가, 삭제가 간편합니다.2. 템플릿 기반 수식 계산기
템플릿을 활용하여 수식 계산기를 구현할 수 있습니다. 템플릿을 사용하면 다양한 데이터 타입을 처리할 수 있는 계산기를 만들 수 있으며, 수식을 처리하는 기능은 다양한 연산자와 함께 동작합니다.
2.1. 프로젝트 구성
- 템플릿을 사용하여 다양한 데이터 타입 지원 (int, double 등)
- 사칙연산 기능 구현
- 사용자 입력을 받아 계산 결과를 출력
2.2. 코드 예시
#include <iostream>
template <typename T>
T add(T a, T b) {
return a + b;
}
template <typename T>
T subtract(T a, T b) {
return a - b;
}
template <typename T>
T multiply(T a, T b) {
return a * b;
}
template <typename T>
T divide(T a, T b) {
return a / b;
}
int main() {
double num1 = 10.5, num2 = 4.2;
std::cout << "Addition: " << add(num1, num2) << std::endl;
std::cout << "Subtraction: " << subtract(num1, num2) << std::endl;
std::cout << "Multiplication: " << multiply(num1, num2) << std::endl;
std::cout << "Division: " << divide(num1, num2) << std::endl;
return 0;
}
📌 Tip: 템플릿을 사용하면 코드 재사용성을 높일 수 있으며, 다양한 타입에 대해 동일한 연산을 처리할 수 있습니다.
3. 간단한 게임 구조 설계
간단한 게임의 구조를 설계하여 게임의 기본적인 흐름을 작성할 수 있습니다. 예를 들어, 콘솔에서 동작하는 간단한 전투 시스템을 설계할 수 있습니다. 이는 객체지향 프로그래밍(OOP)을 활용한 좋은 연습이 됩니다.
3.1. 프로젝트 구성
- 플레이어와 적의 클래스를 정의
- 전투 시스템 구현 (공격, 방어, 체력 관리)
- 게임 흐름 제어 (게임 시작, 종료 등)
3.2. 코드 예시
#include <iostream>
#include <<string>
class Character {
public:
Character(const std::string& name, int health) : name(name), health(health) {}
void takeDamage(int damage) {
health -= damage;
if (health < 0) health = 0;
}
bool isAlive() const {
return health > 0;
}
void attack(Character& target) {
std::cout << name << " attacks " << target.name << "!" << std::endl;
target.takeDamage(10); // 예시로 10만큼 피해를 입힘
}
void displayStatus() const {
std::cout << name << " HP: " << health << std::endl;
}
private:
std::string name;
int health;
};
int main() {
Character player("Hero", 100);
Character enemy("Goblin", 50);
while (player.isAlive() && enemy.isAlive()) {
player.attack(enemy);
enemy.attack(player);
player.displayStatus();
enemy.displayStatus();
}
return 0;
}
📌 Tip: 객체 지향 설계에서 각 클래스는 자체적인 상태와 행동을 가지며, 서로 협력하여 프로그램을 구성합니다.
마무리
이 프로젝트들은 C++의 다양한 기능을 활용하는 좋은 예제들입니다. STL을 활용한 주소록, 템플릿 기반 계산기, 간단한 게임 구현을 통해 C++의 중급 기능들을 익힐 수 있습니다.