티스토리 뷰

반응형

생성자는 객체를 생성할 때, 어떤 정보를 가진 객체를 생성하게 하는지 정의 하는 것이다. 

 

class Base
{
public:
    Base()   {}
    Base(int a) {}
    ~Base()     {}
}

class Derived : public Base{
public:
    // Derived() {}        // Derived()     : Base() {}
    // Derived(int a) {}   // Derivde(int a): Base()

    Derived() : Base(0) {}
    Derived(int a) : Base(a) {}
    ~Derived() {}
}

int main(){
    Derived d(1);
}

 

위 코드에서는 Derived 클래스가 Base라는 기반 클래스를 상속 받은 것을 볼 수 있다.

그리고 주석이 된 부분은 Derived의 생성자이다. 해당 생성자가 생성될 때, 컴파일러는 자동적으로 Derived() : Base() {}와 같이 Base()에 대한 객체도 만들게 된다. 

 

만약, Base()라는 기반 클래스의 생성자가 없을 경우에는 밑처럼 개발자가 직접 기반 클래스의 생성자를 호출해줘야 한다.

 

Protected 생성자

protected는 외부에서 접근할 수 없게 보호하는 것인데, 만약 생성자를 protected는 경우는 어떤 경우일까?

그 경우는 보통 객체의 의미가 추상적일때이다.

 

예를 들어 동물이라는 것은 존재하는 의미가 있지만, 동물이라는 직접적인 객체는 존재하지 않는다.

 

class Animal
{
 //public:
//private:
protected: 
    Animal() {}
};
class Dog : public Animal
{
public:
    Dog() {}   
};

 

따라서 위의 코드처럼 생성자는 protected로 막아 Animal에 대한 직접적인 객체를 만들지 못하게 막고,

Dog라는 객체를 만들 때 상속받게끔 하는 방법을 취할 수 있다.

 

 

 

728x90
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
250x250