written by yechoi

[C++] 생성자/ 참조자 생성자/ const 생성자/ 객체 배열 생성자/ 소멸자 본문

Born 2 Code/C, C++

[C++] 생성자/ 참조자 생성자/ const 생성자/ 객체 배열 생성자/ 소멸자

yechoi 2020. 10. 16. 21:27
반응형

생성자

  • 클래스의 이름과 함수의 이름이 동일하다

  • 반환형이 선언돼 있지 않으며, 실제로 반환하지 않는다

  • 객체 생성시 딱 한 번 호출된다

  • 오버로딩이 가능하다

    class SimpleClass
    {
    private:
      int num1;
      int num2;
    public:
      SimpleClass()
      {
          num1 = 0;
          num2 = 0;
      }
      SimpleClass(int n)
      {
          num1 = n;
          num2 = 0;
      }
      SimpleClass(int n1, int n2)
      {
          num1 = n1;
          num2 = n2;
      }
    };  
  • 첫번째 방식의 생성자를 쓰려면

    SimpleClass sc1;
    SimpleClass *ptr1 = new SimpleClass;
    SimpleClass *ptr = new SimpleClass();
    
    # forbidden
    SimpleClass sc1(); // 함수의 원형을 지역적으로 선언하는 형태
    
  • 멤버 생성자를 이용해 생성자를 만들려면


class Rectangle  
{  
    private:  
        Point upLeft;  
        Point lowRight;  
    public:  
        Rectangle::Rectangle(const int &x1, const int &y1, const int &x2, const int &y2)  
        :upLeft(x1, y1), lowRight(x2, y2)  
    {  
    }  
}

const, 참조자 생성자

생성자를 이용하면 선언과 동시에 초기화가 이뤄지는 형태로 바이너리 코드가 생성된다. 반면 생성자의 몸체부분에서 대입연산을 통한 초기화를 진행하면, 선언과 초기화를 각각 별도의 문장에서 진행하는 형태로 바이너리 코드가 생성된다.

  • const 변수는 선언과 동시에 초기화를 해야하므로, 이니셜라이저를 이용해 초기화를 한다

    class FruitSeller  
    {  
    private:  
            const int APPLE\_PRICE;  
        int numOfApples;  
        int myMoney;  
    public:  
        FruitSeller(int price, int num, int money)  
        : APPLE\_PRICE(price), numOfApples(num), myMoney(money)  
        {  
        }  
    };
    
  • 마찬가지로 참조자도 선언과 동시에 초기화를 해야하므로, 이니셜라이저를 이용해 초기화를 한다

    
    class AAA  
    {  
    public:  
        AAA()  
        {  
        }  
    };
    
    class BBB  
    {  
        private:  
            AAA &ref;  
            const int #
    
        public:  
            BBB(AAA &r, const int &n)  
            :ref(r), num(n)  
            {  
            }  
    };
    
    int main(void)  
    {  
        AAA obj1;  
        BBB obj2(obj1, 20);  
        ...  
    }
    

객체 배열 생성자


# AAA 클래스 배열 정적 선언

AAA arr\[10\];

# AAA 클래스 배열 동적 선언

AAA \*ptrArr = new AAA\[10\];

  • 생성자에 인자를 전달하지 못한다
  • 그러므로 일일히

소멸자

  • 객채 소멸시 반드시 호출
  • 클래스의 이름 앞에 '~'가 붙은 형태의 이름
  • 반환형이 선언돼 있지 않으며, 실제로 반환하지 않음
  • 매개변수는 void형으로 선언돼야 하기 때문에, 오버로딩과 디폴트 값 설정 불가
반응형