C의 struct와 C++ class
C struct는 데이터를 묶고 C++ class는 private state와 method로 invariant를 보호합니다.
C의 struct와 C++ class이란?
C struct는 데이터를 묶고 C++ class는 private state와 method로 invariant를 보호합니다.
관련 state와 behavior를 모델링합니다.
중요한 점
- 연산 전에 invariant를 정의하세요.
- 비어 있음, 가득 참, 할당 실패를 처리하세요.
- 시간 복잡도와 ownership을 함께 평가하세요.
C와 C++ 코드 예제
C
main.c
#include <stdio.h>
typedef struct {
const char *owner;
double balance;
} Account;
void deposit(Account *account, double amount) {
if (amount > 0) {
account->balance += amount;
}
}
int main(void) {
Account account = {"Ada", 100.0};
deposit(&account, 25.0);
printf("%s: %.2f\n", account.owner, account.balance);
return 0;
}
Ada: 125.00
C++
main.cpp
#include <iomanip>
#include <iostream>
#include <string>
#include <utility>
class Account {
std::string owner_;
double balance_;
public:
Account(std::string owner, double balance)
: owner_(std::move(owner)), balance_(balance) {}
void deposit(double amount) {
if (amount > 0) {
balance_ += amount;
}
}
void print() const {
std::cout << owner_ << ": " << std::fixed
<< std::setprecision(2) << balance_ << '\n';
}
};
int main() {
Account account("Ada", 100.0);
account.deposit(25.0);
account.print();
}
Ada: 125.00
C와 C++ 비교
C는 struct pointer를 함수에 전달합니다. C++ class는 balance를 private로 두고 유효한 method로만 변경합니다.
C
구조체와 연산이 분리되고 할당이 명시적입니다.
C++
Class와 container가 invariant와 resource를 관리합니다.
연습 문제
두 버전을 실행하고 수정하여 각 언어의 보장을 관찰하세요.
- 빈 상태와 용량 경계를 테스트하세요.
- Cleanup을 구현하고 leak을 확인하세요.
- Standard container와 비교하세요.