C++
C에 객체지향을 더한 시스템 프로그래밍 언어. 고성능이 필요한 게임, 임베디드, 운영체제 등에 사용.
기본 구조
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}변수 & 타입
int a = 10;
double b = 3.14;
bool c = true;
char d = 'A';
string s = "안녕";
// 상수
const int MAX = 100;
constexpr int SIZE = 256; // 컴파일 타임 상수
// 자동 타입 추론 (C++11)
auto x = 42;
auto y = 3.14;포인터 & 참조
int val = 10;
// 포인터
int* ptr = &val; // 주소 저장
*ptr = 20; // 역참조 (값 변경)
// 참조 (별칭, null 불가)
int& ref = val;
ref = 30; // val도 30이 됨
// nullptr (C++11)
int* p = nullptr;함수
// 기본값 매개변수
int add(int a, int b = 0) {
return a + b;
}
// 참조로 전달 (복사 없음)
void increment(int& n) { n++; }
// const 참조 (읽기 전용)
void print(const string& s) { cout << s; }
// 오버로딩
double add(double a, double b) { return a + b; }
// 람다 (C++11)
auto mul = [](int a, int b) { return a * b; };
auto capture = [&val](int x) { return val + x; }; // 외부 변수 캡처클래스
class Animal {
private:
string name;
public:
Animal(const string& name) : name(name) {} // 초기화 리스트
virtual string speak() const { return ""; } // 가상 함수
string getName() const { return name; } // const 멤버 함수
~Animal() {} // 소멸자
};
class Dog : public Animal {
public:
Dog(const string& name) : Animal(name) {}
string speak() const override { // override 명시
return getName() + ": 왈왈";
}
};
// 사용
Dog dog("멍멍이");
Animal* a = &dog;
cout << a->speak(); // 다형성 → "멍멍이: 왈왈"메모리 관리
// 동적 할당 (직접 관리 — 일반적으로 스마트 포인터 권장)
int* arr = new int[10];
delete[] arr;
// 스마트 포인터 (C++11, 자동 해제)
#include <memory>
auto up = make_unique<Dog>("멍멍이"); // unique_ptr (단독 소유)
auto sp = make_shared<Dog>("냥이"); // shared_ptr (공유 소유)
up->speak(); // 포인터처럼 사용
// delete 불필요 — 스코프 벗어나면 자동 해제STL 컨테이너
#include <vector>
#include <map>
#include <set>
#include <unordered_map>
// vector (동적 배열)
vector<int> v = {1, 2, 3};
v.push_back(4);
v.size();
v[0];
// map (정렬된 키-값)
map<string, int> m;
m["apple"] = 1;
m.find("apple") != m.end(); // 존재 확인
// unordered_map (해시맵, 더 빠름)
unordered_map<string, int> um;
// 범위 기반 for (C++11)
for (const auto& elem : v) {
cout << elem;
}STL 알고리즘
#include <algorithm>
sort(v.begin(), v.end());
sort(v.begin(), v.end(), greater<int>()); // 내림차순
auto it = find(v.begin(), v.end(), 3);
bool found = (it != v.end());
int cnt = count(v.begin(), v.end(), 3);
transform(v.begin(), v.end(), v.begin(),
[](int x) { return x * 2; });예외 처리
#include <stdexcept>
try {
throw runtime_error("오류 발생");
} catch (const runtime_error& e) {
cerr << e.what();
} catch (...) {
cerr << "알 수 없는 오류";
}빌드
# 컴파일
g++ -std=c++17 -O2 -o output main.cpp
# CMake
cmake -B build
cmake --build build