C++ (2)

2024. 3. 25. 14:27카테고리 없음

클래스와 객체

1.1 객체

캡슐화 : 객체의 구성 요소들을 캡슐로 싸서 보호하고 볼수 없게 하는 것 (객체의 본질적인 특징)

객체 = state(상태) + behavior(행동)
실제 코드 상에서는 "객체 = 멤버 변수(상태) + 멤버 함수(행동)" 이다.

이러한 객체를 사용하기 위해서는 인스턴스(instance)를 만들어야한다.
붕어빵 틀에 밀가루 반죽을 넣어 붕어빵을 제작하듯, 객체를 인스턴스를 통해 직접 객체에 있는 변수나 함수들을 사용한다.

1.2 클래스

클래스 = 클래스 선언부 + 클래스 구현부

1.2.1 클래스 선언부

class [클래스이름] {
[접근지정자] :
     int a;  // 멤버 변수
     void getA();  //멤버 함수
};

접근지정자 : public(외부 접근 가능), private(외부 접근 불가능), protected(상속관계만 접근 가능)

1.2.2 클래스 구현부

[함수의 리턴 타입] [클래스이름] :: [멤버 함수명]([매개변수]) {
    return [값];
}

범위 지정자 연산자(::) : 클래스 이름과 멤버 함수를 표현하는데 사용


#include <iostream>
using namespace std;

//선언부
class Circle{
public:
  int radius; //멤버 변수
  double getArea(); //멤버 함수
};

//구현부
double Circle :: getArea(){
  return radius * radius*3.14;
}

int main(){
  Circle a; //객체 생성
  a.radius = 10; //멤버 변수 접근
  cout << a.getArea(); //멤버 함수 호출 
}


1.3 생성자

생성자 : 생서자를 통해 객체를 초기화 할수 있음

  • 생성자의 목적은 객체가 생성될 때 필요한 최초 작업을 위함이다.
  • 생성자는 디폴트로 '기본 생성자'가 생성되어 객체를 초기화 하지만, 클래스 하나에 여러 개의 생성자를 둘 수 있다.
  • 생성자의 이름은 클래스 이름과 동일하게 작성되어야만 한다.
  • 생성자 함수의 원형에 Return 타입을 선언하지 않는다.
  • 다만, 생성자 함수는 return 문을 통해 함수 실행 종료를 진행할 수는 있기 때문에, 값만 리턴하지 않으면 된다.

위임 생성자

include <iostream>
using namespace std;

class Circle{
public :
   int radius;
   int test1 = 100;
   int test2; 
   Circle();
   Circle (int r);
   // int Circle(int r); 리턴 타입 있으면 안됨
}

Circle :: Circle() : test2(10){ //test2 변수를 생성자 함수에서 초기화 할 수 있음. 
   radius =1;
   // return; //생성자 함수를 종료하는 정상 리턴문
   // return 0; 값이 있으면 안됨
}

Circle :: Circle(int r){
   radius = r;
}

/*
지금 Circle()과 Circle(int r) 두개의 생성자의 코드가 거의 동일하다.
이때 위임 생성자를 통해 중복되는 코드를 간략화 할 수 있다.
아래처럼 하면 Circle a;를 main()에서 진행 할 경우 radius = 1; 진행하게 되어 Circle() 생성자와 동일한 진행이 된다.
Circle :: Circle() :: Circle(1){ }
Circle :: Circle(int r){
  radius = r;
}
아래는 멤버 변수 초기화와 위임 생성자를 할용한 코드이다.
Circle :: Circle() ::Circle(1, 2, 3){ }
Circle :: Circle(int a, b, c){
  radius(a), test1(b), test2(c);
}
*/

int main(){
  Circle a; //Circle() 생성자 호출
  Circle b(2); // Circle(int r) 생성자 호출 
}


1.4 소멸자

소멸자 : 객체가 소멸 시점에서 객체 메모리가 반환되기 위해서 호출되는 함수

  • 소멸자의 목적은 객체가 사라질 때 필요한 마무리 작업을 위함이다.
  • 소멸자의 이름은 클래스 이름 앞에 ~를 붙인다.
  • 리터 타입이 없으면 어떤 값도 리턴이 안된다.
  • 오직 한 개만 존재하며 매개 변수를 가지지 않는다.
  • 선언되어 있지 않으면 기본 소멸자가 자동으로 생성된다.
  • 생성된 반대 순으로 객체가 소멸된다. (가장 나중에 선언된 지역 객체 << 처음으로 선언된 지역 객체 << 전역 객체)

 

include <iostream>
using namespace std;

class Circle(){
public:
  int radius;
  Circle();
  ~Circle();
};

Circle :: Circle(){
  radius = 1;
}

Circle :: ~Circle(){
   cout << radius << "소멸" <<endl;
}

int main(){
  Circle a;
  Circle b;
  return 0; // 소멸 시점에 ~Circle() 소멸자 함수 호출을 통해 b, a순으로 메모리 반환해 준다.
}


1.5 인라인 함수

~~~

1.6 구조체

2. 바람직한 C++ 작성법