알고리즘

C++ 상속 기본개념 & 문법

이온시옥 2019. 1. 5. 08:23
반응형



상속은 코드의 재활용이 절대 아니다.

코드의 재활용이라고 생각하지말자.


상속을 제대로 사용하면 매우 우아한 코드를 짤 수 있지만,,, 이도저도아니게 사용한다면 오히려 독이 된다.




"Person 객체 <---- UnivStudent 객체"

UnivStudent는 Person객체를 상속한다.



#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 { //Person 클래스를 Public 상속함.

private:

    char major[50];

    

public:

    UnivStudent(char * myname, int myage, char* mymajor) :Person(myage, myname) { //생성자에서 부모의 인자도 모두 받음. 하지만 보다시피 이니셜라이져를 통하여 부모의 생성자를 호출하여 초기화를 진행함. 즉, 자식의 생성자 안에서 부모의 생성자를 호출하는 식으로 생성자를 구성함.

        strcpy(major, mymajor);

    }

    void WhoAreYou() const {

        WhatYourName(); //Person 클래스의 멤버함수

        HowOldAreYou(); //Person 클래스의 멤버함수

        cout << "My major is " << major << endl;

    }

};


int main () {

    UnivStudent a_student("Steve", 22, "Computer Engineering");

    a_student.WhoAreYou();

    

    return 0;

}





/*

  Person               UnivStudent

    상위 클래스             하위 클래스

    기초(Base) 클래스       유도(Derived) 클래스

    슈퍼(super) 클래스      서브(Sub) 클래스

    부모 클래스             자식 클래스

                                        ----> 모두 동일한 표현

 */


//부모의 private 멤버는 자식이 접근이 불가능함.

//부모의 Public에 선언된 생성자 or 함수로부터 접근해서 사용해야됨.



반응형