C++

상속(1)

akongman 2024. 2. 13. 19:39

현실세계에서 상속이라 하면 물려받는 것이라고 말할 수 있는데 그러한 부분은 코드상에서도 유사적용 되고 있음을 알 수 있다. 복사생성자 몹지 않게 생각해둘 것도 많고 다소 복잡한 과정이 될 수도 있다.

필자가 이해한 부분을 최대한 어렵지 않게 풀어서 얘기하려 노력할테니 그 의미가 잘 전달 됐으면 좋겠다. 

 

상속 문법적 이해부터 들어가보자 

#include <iostream>

class A { 
  int num;
  public : 
  A() :num(20){}  
  void function() {std::cout<<"A출력"<<std::endl;}
};

int main() { 
  A ac;
}

위 코드를 보면 A 클래스의 ac 객체를 생성했고 ac객체가 만들어지면서 A 클래스 내에 있는 생성자를 호출하게 된다.

그런데 B라는 클래스를 만들고 B라는 클래스 내에서 A 클래스에 멤버변수와 멤버함수를 쓸 수 있도록 하고 싶다.

그럼 이때 필요한 것이 상속이란 것이 필요한데 상속을 진행시키기 위해서는 다음 문장을 봐보자. 

 

class 클래스명 : 상속명시 상속할 클래스 { } 

 

상속명시 부분에는 다음 세가지가 존재한다.

1) public 2) private 3) protected 

위는 접근제어지정 방식 아닌가요?  맞다 위 상속명시해야할 부분에 대해서는 뒤에 언급하겠다.

 

따라서 예를 들어본다면

#include <iostream>

class A { 
  int num;
  public : 
  A() :num(20){}  
  void function() {std::cout<<"A출력"<<std::endl;}
};

class B :public A { 
   public :
   B() {std::cout<<"B클래스 생성"<<std::endl;}
};

int main() { 
  A ac;
  B ab;
  ab.function();
}

B클래스를 만들었고 A클래스의 멤버변수, 멤버함수를 상속 즉, 물려받았다.

따라서 B 클래스 내에는 생성자말고 function()이라는 함수가 존재하지 않지만 function()을 호출하여 A출력이란 문자열이 출력되는 흐름을 보이고 있다. 그렇다는 뜻은 function() 이라는 함수가 호출이 됐다는 뜻이고

눈에는 보이지 않지만 B클래스 내에서 A클래스의 멤버함수를 사용하고 있다는 뜻이 아니겠는가?

이러한 상황을 우리는 상속 받았다.라고 말한다.

 

자 그럼 이제 상속을 시키기 위한 발판을 마련했다. 그럼 이제 발판 위에 올라서보는 단계가 필요하겠다.

발판 위에 올라설 준비가 됐다면 다음 장에서 조금 더 심화된 내용으로 들어가보자