2023 c++

23년 C++ chap7 클래스와 생성자 -> 객체 지향과 클래스

gy8879 2023. 7. 21. 15:24

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;
}

ㄴ> 멤버 함수에는 한정자가 있다

ㄴ> 멤버 함수에는 앞에 클래스 이름이 붙는다 -> 클래스이름 + 스코프 기호(::) + 멤버 함수 이름