6. 기본 클래스 프로그래밍 6 컴퓨터공학과 신동일
형 (type) 변수의 형 차지하는 메모리 크기 포함할 수 있는 정보의 종류 수행 가능한 동작의 종류 크고 복잡한 실제 세계의 문제를 해결하기 위하여 새로운 형의 창조가 요구됨
클래스 클래스의 선언 -> 새로운 형 클래스 데이터 멤버, 멤버 변수: 클래스 내부의 변수 메쏘드(method), 멤버 함수: 클래스 내부의 함수 클래스 선언 class Cat { public: unsigned int itsAge; unsigned int itsWeight; Meow(); };
클래스 객체의 정의 Cat Frisky; // Cat 정의 객체 = 인스턴스 (instance) 멤버 엑세스 Frisky.Weight = 50; Frisky.Meow();
Private와 Public 클래스의 모든 멤버는 기본값에 따라 private이다! class Cat { unsigned int itsAge; unsigned int itsWeight; Meow(); }; Cat Garf; Garf.itsweight = 100; // error!
Private의 이용 멤버 데이터는 일반적으로 private으로 설정함 외부에서 직접적인 access를 방지 단, 멤버 데이터의 외부 설정을 위하여 public accessor method를 선언 priavte 멤버 변수의 값을 읽거나 설정하는 클래스 멤버 함수로서 public으로 선언된 것 불편 감수의 이유 데이터의 이용 방법과 저장 방법의 분리 데이터 사용 함수를 재정의 하지 않고도 데이터 저장 방법을 변경 가능
클래스 함수의 구현 int Cat:::Meow() { … } 교과서 리스팅 6.3 참조 생성자와 소멸자 생성자: 클래스 멤버 변수의 초기화, 인자 가능 Cat::Cat(); 소멸자: 객체에 할당된 메모리 청소, 인자가 없음 Cat::~Cat(); 기본 생성자와 소멸자: 컴파일러가 설정, 아무일로 하지 않음
const 멤버 함수 const 클래스 메쏘드: 그 함수가 클래스 내부의 변수값을 변경하지 않을 것이라는 약속 void SomeFunction() const; 만약, 함수를 const로 선언한 후 함수 구현부가 내부 변수를 변경 -> 컴파일 오류! 가능한 많은 메쏘드를 const로 선언하라! -> 컴파일러가 오류를 찾아준다! 교과서 P. 171: 컴파일러가 오류를 잡아내도록 하는 이유는?
클래스 선언과 메쏘드 정의 클래스 선언: 헤더 파일 메쏘드 정의: 본 파일, .CPP 클래스 선언의 기능 클래스가 무엇이고 어떤 데이터를 포함하며 어떤 함수를 가지는지 알린다 클래스의 인터페이스(interface) 메쏘드 정의 함수가 동작하는 방법을 알려줌 클래스 메쏘드의 구현부 클래스의 저자에게만 중요 -> 사용자에게는 불필요! -> 분리!
인라인 구현 클래스 메쏘드의 인라인 구현 inline int Cat::Meow() { … } 함수 정의를 클래스 선언에 포함 -> 자동 인라인 class Cat { int GetWeight() { return itsWeight; } void SetWeight(int aW); };
버그 사냥 class TV { public: void SetStation(int Station); int GetSttion() const; private: int intsStation; }; main() { TV myTV; myTv.itsStation = 9; TV.SetStation(10); TV myotherTv(2); }