상속

보물창고·2022년 8월 20일
0

c++ basic 코드누리

목록 보기
34/50

개념

: 한 클래스가 다른 (기반)클래스에서 정의된 속성(데이터, 함수)을 그대로 물려 받는 것을 말함.
-> 이때 반드시 public 상속을 사용해야 함.

  • 재사용성을 가져옴.
  • 코드의 중복을 방지함.

장점.

  • 1) 기존 클래스에서 새로운 기능을 추가할 수 있음.
    // 다형성을 설계하기 위한 기본 과정

  • 2) 중복되는 코드가 없어짐.

protected

: 파생클래스만 접근할 수 있게 하는 접근 지정자.

  • 외부에서 접근 불가함.

상속과 생성자.

: 파생 클래스의 생성자 호출시, 기반 클래스의 생성자 호출을 완료 후,
파생 생성자 호출 순서로 생성자가 호출됨.

  • 파생에서 기반 클래스의 생성자를 직접 호출하지 않으면,
    기반 클래스의 디폴트 생성자를 호출하게 됨.

  • 기반 클래스의 인자가 있는 생성자를 호출하고자 하면,
    파생의 초기화리스트에서 명시적으로 호출해야 함.

주의사항.

1.기반 클래스의 디폴트 생성자를 private에 위치할 경우,
파생 클래스의 생성자에서 기반 클래스의 생성자를 호출할 수 없음.
-> 왜냐하면, private은 기반클래스만 접근이 가능하므로.
-> protected로 하면 문제 없음.

  1. 기반 클래스에 디폴트 생성자가 없다면, 파생클래스에서는 반드시
    기반 클래스의 생성자를 명시적으로 호출해야 함.
  • problem
    : Person 클래스(기반) 와 Student클래스(파생) 만들고, Person에 2개의 인자.
    이름, 나이 생성자 만들자.

    • 기반이의 생성자를 명시하지 않아서 발생하고 있음..

파생이가 기반이의 생성자를 호출하는 원리

class Animal
{}
class Dog : public Animal
{
public :
Dog() {}
}
여기에서 컴파일러가 알아서 밑의 코드처럼 만듬
class Dog : public Animal
{
public :
Dog() : Animal() {} // 컴파일러가 암묵적으로 만들어 놓음.
}

problem

외부에서 Animal 과 dog 객체를 만들어서, 기반 생성자의 접근 지정자를
변경해보고 출력해보아라.

protected 생성자

: 자기 자신의 객체를 만들 수 없지만, 파생 객체는 만들 수 있음.

  • 자기 자신을 추상화시킴.

problem

가) 기반 객체를 생성하라.
나) 파생 객체를 생성하라

profile
🔥🔥🔥

0개의 댓글