23년 C++ chap7 클래스와 생성자 -> 객체 지향과 클래스
02 객체 지향과 클래스
-새로운 자료형(타입)을 만들 때는 클래스를 사용한다
-객체 지향 프로그램에서는 타입으로 클래스를 만들고, 이를 기반으로 인스턴스인 객체를 만든다(인스턴스화)
*객체 지향 프로그래밍 vs 절차 지향 프로그래밍
1 객체 지향에 필요한 클래스의 구조
-클래스를 기반으로 인스턴스를 만드는 것을 인스턴스화라고 한다
-객체 지향 프로그래밍을 할 때는
1. 클래스 정의 -> 속성(데이터 멤버)과 행위(멤버 함수) 선언
2. 멤버함수 정의 -> 모든 행위(멤버 함수) 정의
3. 애플리케이션 -> 클래스 기반으로 객체를 만들어 멤버함수 사용
이 필요하다.
2 클래스 정의
-헤더, 본문, 세미콜론 세 부분으로 구성
class Circle{ //<- 헤더
private:
double radius; //<-데이터 멤버 선언
public:
//<-멤버 함수 선언(6줄 이하)
double getRaius() const;
//함수 내부에서 변경 못하게 할 때는 const 한정자를 뒤에 붙임
double getArea() const;
double getPerimeter() const; //둘레
void setRadius(double value);
}; //클래스 정의 뒤에는 꼭 세미콜론이 위치
-> 클래스 헤더는 class 키워드 뒤에 클래스이름을 붙여 만든다(클래스이름은 대문자로 시작하여 라이브러리 클래스와 구분하는 것이 좋다)
-> 클래스 본문은 데이터 멤버와 멤버 함수의 선언을 가진 블록 부분이다
-> 세미콜론은 클래스 정의를 종료하겠다는 부분
(1) 데이터 멤버 선언
-데이터 멤버는 클래스 속성을 구현하는 데 사용할 것들
-어떤 속성이 단독으로 존재 가능한지, 어떤 속성이 다른 속성에 의존하는지 알아야함
ㄴ> 위의 코드에서는 radius가 단독 존재 가능 / 넓이, 둘레는 의존하는 속성
(2) 멤버 함수 선언
-멤버 함수는 클래스 행위를 구현하는 데 사용할 함수(함수의 선언과 비슷)
->함수 끝에 const: 함수 내부에서 어떤 것도 변경하지 못함
->const가 없는 경우: 변경을 허가함
(3) 접근 제한자
-접근 제한자는 접근 권한을 나타낼 때 사용
-클래스에서 데이터 멤버와 멤버 함수 선언은 기본적으로 private이 붙음
-> 접근 제한자의 멤버 접근 범위
접근 제한자 | 같은 클래스에서 접근 | 서브 클래스에서 접근 | 모든 곳으로부터 접근 |
private | o | x | x |
protected | o | o | x |
public | o | o | o |
즉, public > protected > private
(3) 멤버 함수 정의
-멤버 함수 선언은 단순히 함수의 프로토타입을 적은 것 -> 따라서 별도의 정의 필요
-멤버 함수 정의는 클래스 정의 구문 외부에서 해야 함
//멤버함수 정의 부분 시작
//getRadius 멤버함수 정의
double Circle::getRadius() const{
return radius;
}
//getArea 멤버함수 정의
double Circle::getArea() const{
const double PI = 3.14;
return(PI*radius*radius);
}
//getPerimeter 멤버함수 정의
double Circle::getPerimeter() const{
const double PI = 3.14;
return(2*PI*radius);
}
//setRadius 멤버함수 정의
void Circle::setRadius(double value){
radius = value;
}
ㄴ> 멤버 함수에는 한정자가 있다
ㄴ> 멤버 함수에는 앞에 클래스 이름이 붙는다 -> 클래스이름 + 스코프 기호(::) + 멤버 함수 이름