1. 클래스
• 기본 자료형으로 인식해 주지 않는 C언어의 구조체에 대한 불만으로 등장
• 구조체 변수를 선언할 때 struct Car a; 와 같이 사용
• 클래스 = 구조체 + 함수
• 추상화된 데이터로 사용자 정의 자료형을 정의하는 것
1-1. 생성자
• 객체가 생성될 때, 초기값을 제공하고 필요한 초기화 절차를 실행하는 클래스와 이름이 동일한 return값이 없는 멤버 함수
• 함수이므로 중복 정의가 가능하고, 매개변수를 가질 수 있으며, 생성자에서 다른 생성자 호출하는 것 또한 가능
• 반드시 public한 접근이 가능해야 함
• 사용자가 정의하지 않으면, 컴파일러가 내용이 없는 디폴트 생성자를 자동으로 추가
1-2. 소멸자
• 객체가 사라질 때, 메모리 할당 해제 및 마무리 절차를 실행하는 클래스 이름 앞에 ~가 붙은 return값이 없는 멤버 함수
• 함수이지만 중복 정의가 불가능하고, 매개변수를 가질 수 없음
• 반드시 public한 접근이 가능해야 함
• 사용자가 정의하지 않으면, 컴파일러가 내용이 없는 디폴트 소멸자를 자동으로 추가
1-3. 선언과 구현의 분리
• 클래스의 선언과 구현을 분리하는 것이 일반적
1-4. 클래스 문법 요약
// Car.h (헤더파일, 클래스 선언)
class Car {
protected:
int speed;
char name[40];
public:
int gear;
Car(){ }
~Car(){ }
Car(int s, char* n, int g) // 매개변수가 있는 생성자
void changeGear(int g);
void speedUp();
void display();
void whereAmI();
};
// Car.cpp (클래스 정의)
#include "Car.h”
Car::Car(int s, char* n, int g) { // 매개변수가 있는 생성자
speed = s, gear = g; // 멤버변수 초기화
strcpy(name, n); // 멤버변수 초기화
}
void Car::changeGear(int g) {
gear = g;
}
void Car::speedUp() {
speed += 5;
}
void Car::display() {
printf("[%s] : 기어=%d단 속도=%dkmph\n", name, gear, speed);
}
void Car::whereAmI() {
printf("객체 주소 = %x\n", this);
}