[열혈 C++ 프로그래밍] 상속

Yerin·2023년 5월 17일

상속의 방법

#include <iostream>
using namespace std;

class Person
{
private:
	int age;
	char name[50];

public:
	Person(int myage, char* myname) : age(myage)
	{
		strcpy(name, myname);
	}
	void WhatYourName() const
	{
		cout << "My name is " << name << endl;
	}
	void HowOldAreYou() const
	{
		cout << "I'm" << age << " years old" << endl;
	}
};

class UnivStudent : public Person
{
private:
	char major[50];
public:
	UnivStudent(char* myname, int myage, char* mymajor)
		: Person(myage, myname)
	{
		strcpy(major, mymajor);
	}
	void WhoAreYou() const
	{
		WhatYourName();
		HowOldAreYou();
		cout << "My major is " << major << endl << endl;
	}
};
  • 이니셜라이저를 통해서 유도 클래스는 기초 클래스의 생성자를 명시적으로 호출해야 한다.
    유도 클래스의 생성자는 기초 클래스의 멤버를 초기화 할 의무를 갖는다.
    private 멤버는 유도 클래스에서도 접근이 불가능하므로, 생성자의 호출을 통해서 기초 클래스의 멤버를 초기화해야 한다.

UnivStudent(char myname, int myage, char mymajor)
: Person(myage, myname)
{
strcpy(major, mymajor);
}

유도 클래스의 객체 생성 과정

  1. 메모리 공간의 할당
  2. 유도 클래스의 생성자 호출
  3. 기초 클래스의 생성자 호출 및 실행
  4. 유도 클래스의 생성자 실행

유도 클래스의 생성자에서 기초 클래스의 생성자 호출을 명시하지 않으면, 기초 클래스의 void 생성자가 호출된다.

세 가지 형태의 상속

1. public 상속
접근 제어 권한을 그대로 상속한다!
단, private은 접근불가로 상속한다!

2. protected 상속
protected보다 접근의 범위가 넓은 멤버는 protected로 상속한다.
단, private은 접근불가로 상속한다!

3. private 상속
private보다 접근의 범위가 넓은 멤버는 private로 상속한다.
단, private은 접근불가로 상속한다!

profile
재밌는 코딩 공부

0개의 댓글