출처 :
- 명품 C++ Programming (저자 황기태)
- 객체지향프로그래밍
객체
캡슐화
- 객체의 본질적인 특성
- 외부에 객체의 일부분 공개
멤버 변수와 멤버 함수
- 상태 state와 행동 behavior로 구성
- 멤버 변수에 상태 저장
- 멤버 함수에 행동 저장
- 직접 값에 접근하지 않음 → 멤버 함수를 통해 멤버 변수에 접근
클래스와 객체
클래스
- 객체를 만드는 틀, 설계도
- 객체 (== 실체)가 아님
- 멤버 변수와 멤버 함수로 구성
클래스 선언부 class declaration
- class 키워드를 이용
- 멤버 변수와 멤버 함수 선언
- 멤버 변수는 클래스 선언 내에서 초기화할 수 없음
- 멤버 함수는 원형 prototype 형태로 선언
- 멤버에 대한 접근 권한 지정
- private, public, protected
- public - 다른 모든 클래스나 객체에서 멤버의 접근이 가능함
- 디폴트는 private
- 헤더파일 소속으로 .h 파일에 들어감
// 클래스 선언부
class Circle {
// 디폴트는 private
int radius1;
public: // 멤버에 대한 접근 지정자
int radius2; // 멤버 변수
double getArea(); // 멤버 함수
}; // 끝에 세미콜론 꼭 붙이기!
클래스 구현부 class implementation
- 클래스에 정의된 모든 멤버 함수 구현
- 소스 파일 소속으로 .cpp 파일에 들어감
// 클래스 구현부
double Circle :: getArea() { // ::는 범위 지정 연산자
return 3.14 * radius * radius; // radius는 Circle 클래스의 멤버 변수
}
*교수님 질문!
클래스 선언부와 구현부를 나누는 이유는?
- 코드를 감추기 위해! 내부의 노하우를 담은 구현부는 인코딩해서 감춰두고, 헤더파일 통해 함수를 사용할 수 있도록..함수를 사용할 떄 모든 구현부를 알 필요없다.
- 클래스를 다른 파일에서 활용하기 위해!
.cpp 파일에 헤더파일(선언부) 없이 구현부만 있으면 컴파일 가능한가?
- 그 클래스가 뭔지 모르기 때문에 에러가 난다.
객체
- 클래스 모양 그대로 가지고 탄생
- 멤버 변수와 멤버 함수로 구성
- 메모리에 생성됨
- 실체와 같은 말
- 객체들은 서로 다른 공간에 생성
클래스와 객체의 관계
class TV {
bool on;
int channel;
int volume;
public:
void powerOn() { }
void increaseChannel() { }
}; // 세미콜론 꼭 쓰기!
// TV 객체 1과 TV 객체 2는 서로 다른 별도의 영역에 멤버들을 만든다.
#include <iostream>
using namespace std;
class Circle {
public:
int radius;
double getArea();
// Cicle의 기본 생성자가 자동으로 생성된다.
};
double Circle::getArea() {
return 3.14 * radius * radius;
}
int main() {
Circle donut; // donut 객체 생성 -> 메모리가 할당 된다.
donut.radius = 1; // donut 멤버 변수 접근 - public 이라서 접근 가능
double area = donut.getArea(); // donut 멤버 함수 호출
}
실습 예제
#include <iostream>
using namespace std;
class Rectangle {
public:
int width;
int height;
int getArea();
};
int Rectangle::getArea() {
return width * height;
}
int main() {
Rectangle rect;
rect.width = 3;
rect.height = 5;
}
'[전공]' 카테고리의 다른 글
[명품 C++] 05 함수와 참조, 복사 생성자 (6) | 2022.06.05 |
---|---|
[명품 C++] 04 객체 포인터와 객체 배열, 객체의 동적 생성 (0) | 2022.06.02 |
[명품 C++] 03 - 2 생성자 소멸자 구조체 (0) | 2022.06.02 |
[명품 C++] 02 C++ 프로그래밍의 기본 (0) | 2022.06.02 |
[명품 C++] 01 C++ 시작 (0) | 2022.06.02 |