절차지향 프로그래밍
객체지향 프로그래밍
class 클래스명 {
접근지정자:
멤버변수;
멤버함수();
};
| 지정자 | 접근 범위 |
|---|---|
private | 클래스 내부에서만 접근 가능 |
protected | 클래스 내부 + 상속된 클래스에서 접근 가능 |
public | 어디서나 접근 가능 |
#include <iostream>
#include <string>
using namespace std;
class Circle {
public:
int radius;
string color;
double calcArea() {
return 3.14159 * radius * radius;
}
};
int main() {
Circle obj;
obj.radius = 100;
obj.color = "blue";
cout << "원의 면적은 " << obj.calcArea() << "입니다." << endl;
return 0;
}
int main() {
Circle pizza1, pizza2;
pizza1.radius = 100;
pizza1.color = "yellow";
cout << "피자1의 면적=" << pizza1.calcArea() << "\n";
pizza2.radius = 200;
pizza2.color = "white";
cout << "피자2의 면적=" << pizza2.calcArea() << "\n";
return 0;
}
중요: 각 객체의 멤버 변수 값은 독립적으로 관리됨!
class PrintData {
public:
void print(int i) { cout << i << endl; }
void print(double f) { cout << f << endl; }
void print(string s = "No Data!") { cout << s << endl; }
};
int main() {
PrintData obj;
obj.print(1); // int 버전 호출
obj.print(3.14); // double 버전 호출
obj.print("C++14"); // string 버전 호출
obj.print(); // 기본값 사용
return 0;
}
#include <iostream>
#include <string>
using namespace std;
class Car {
int speed;
int gear;
string color;
public:
int getSpeed();
void setSpeed(int s);
};
#include "car.h"
int Car::getSpeed() {
return speed;
}
void Car::setSpeed(int s) {
speed = s;
}
#include "car.h"
int main() {
Car myCar;
myCar.setSpeed(80);
cout << "현재 속도는 " << myCar.getSpeed() << endl;
return 0;
}
✅ 컴파일 시간 단축: 헤더가 변경되지 않으면 재컴파일 불필요
✅ 정보 은닉: 구현 세부사항을 .cpp에 숨김
✅ 코드 재사용: .h와 .cpp만 공유하면 됨
// 방법 1: 매번 std:: 사용
std::cout << "Hello" << std::endl;
// 방법 2: using namespace std 선언
using namespace std;
cout << "Hello" << endl;
// 방법 3: 특정 항목만 사용
using std::cout;
using std::endl;
목적: 식별자의 충돌 방지, 논리적 그룹화
| 개념 | 설명 |
|---|---|
| 캡슐화 | 데이터와 함수를 하나로 묶음 |
| 정보은닉 | private으로 내부 구현 숨김 |
| 상속 | 기존 클래스의 특성을 물려받음 |
| 다형성 | 같은 함수명이 객체마다 다르게 동작 |