chap3. 클래스의 기본
1. C++에서의 구조체
namespace CAR_CONST{
enum{ ID_LEN = 20; , MAX_SPD = 200;... };
} // namespace 지정, enum 사용시 어느 공간에서 사용되는지 파악용이
struct Car{
char gamerID[CAR_CONST::ID_LEN];
int fuelgauge;
void Accel();
}; // 구조체 내에 함수 원형만 남기면 기능판단 용이.
void Car::Accel(){
fuelgauge -= CAR_CONST::MAX_SPD;
} // 구조체 외부에서 함수정의. :: 사용하는 것, 멤버변수 직접접근 가능 기억.
int main(){
Car run99 = {“run99”,80};
run99.Accel();
} // . 연산자로 함수에 접근.
- 별도의 typedef 선언 없이도 구조체 이름만으로 변수선언 가능
- 구조체 내에 함수선언 가능. 이 경우 구조체 멤버변수에 직접접근 가능.
- 구조체 내에 함수선언 가능. 이 경우 구조체 멤버변수에 직접접근 가능.
- 구조체 내에 함수의 원형선언, 함수의 정의는 밖에 정의 -> 가독성 up!
- 이름공간 + enum -> 가독성 up!
2. 클래스(Class)와 객체(Object)
struct 대신 class 사용하면 구조체가 아닌 class가 된다.
(사실 구조체도 class의 일종!, 둘은 접근제어 측면에서 큰 차이가 있음)
class Car{
private:
char ID[CAR_CONST::ID_LEN];
int fuel;
public:
void Accel();
};
void Car::Accel(){
fuel -= CAR_CONST::ID_LEN;
}
- C++에는 3가지의 접근제어 지시자가 존재
1. public – 어디서든 접근 허용
2. protected – 상속관계에서 접근 허용
3. private – 동일 class내에서 접근 허용
접근제어 지시자 A 선언되면, 그 이후에 선언되는 함수, 변수는 해당 지시자의 영향을 받음.
이후 새로운 접근제어 지시자 B 선언되면, 그 이후에 선언되는 함수, 변수는 새로운 지시자의 영향을 받음.
함수의 정의를 Class 밖으로 빼도, private 변수에 접근가능.
키워드 struct로 정의한 Class에 접근제어 지시자 설정안하면, 모든 변수와 함수는 public 으로 선언됨.
키워드 class 로 정의한 Class에 접근제어 지시자 설정안하면, 모든 변수와 함수는 private 으로 선언됨.
Class 의 멤버변수 초기화는 constructor를 사용하세요~.
CF) C언어 복습 – #ifndef ~ #define ~ #endif
#ifndef,#define,#endif
#ifndef MACRO_NAME
#define MACRO_NAME
~ 컴파일할 내용
#endif
- “#ifndef 뒤의 메크로가 정의되어 있지 않으면, #define 정의하고, #endif 까지 컴파일하라” 의 의미.
- 헤더파일에 반드시 넣어줘야 중복포함을 막을수 있음.
3. C++에서의 파일 분할
Q) 각 파일에는 어떤 내용이 들어가야하는가?
헤더파일(클래스이름.h)
#ifndef __NAME_H_
#define __NAME_H_
,,,,,
#endif
|
소스파일1(클래스이름.cpp)
#include “클래스이름.h”
#include <기타표준>
|
소스파일2(~.cpp)
#include “클래스이름.h”
|
클래스선언(declaration)
인라인 함수 선언,정의
|
클래스정의(definition)
함수정의
|
main 함수
(자세한 정의 알 필요 x)
|
- 인라인 함수는 컴파일 과정에서 함수의 호출문을 몸체로 바꾸므로 헤더파일에 정의되어야함.
- 컴파일은 파일 단위로 이루어짐에 유의!
(A.cpp 컴파일중 B.CPP를 참조하지 않음)
4. 클래스의 객체 생성 방법
ClassName objectName; //일반적인 변수생성방식과 동일
ClassName * obpt1 = new ClassName //동적 메모리 할당
댓글 없음:
댓글 쓰기