본문 바로가기
Language/C++ & openGL

C++ 상속inheritance, derived class, 오버라이드(overriding) - Power C++ p565 LAB

by javapp 자바앱 2019. 1. 17.
728x90

상속inheritance

derived class 선언

class 파생 클래스 명 : 접근 지정자 기본 클래스 명

{

파생 클래스에 추가할 멤버 선언

};


클래스의 큰 장점인 '상속(inheritance)' '캡슐화(Encapsulation)' '다형성'


protected : 파생클래스의 함수에서 기본 클래스의 protected멤버에 접근할 수 있다.



상속방법:

class Student : public Human   

기본 클래스의 public 멤버 -> 파생 클래스의 public 멤버

기본 클래스의 protected멤버 -> 파생 클래스의 protected멤버

기본 클래스의 private멤버 -> 파생 클래스의 private멤버


멤버 함수 오버라이드

오버라이드(overriding) : 파생 클래스의 함수가 기본 클래스의 함수를 대신하는 것

  Human h1("춘향", 18);

h1.print();                                기본 클래스의 함수



Student s1("명진", 21, "컴퓨터");

s1.print();                                파생 클래스의 함수



구현 Code 


#include <iostream>

#include <string>

using namespace std;


class Human

{

string name;

int age;

public:

Human()

{

name = " ";

age = 0;

}

Human(string name, int age)                            //Constructor

{

this->name = name;

this->age = age;

cout << "Human생성자" << endl;               

}

~Human() { cout << "Human소멸자" << endl; }    //Destructor


void setName(string name) { this->name = name; }

string getName() { return name; }

void setAge(int a) { age = a; }

int getAge() { return age; }


void print();                                       //멤버 함수 오버라이드

};


class Student : public Human                        //derived class (파생 클래스)

{

string major;

public:

Student()

{

major = " ";

}

Student(string name, int age, string major) : Human(name, age) //기본 클래스의 생성자를 선택

{                                                          //기본 클래스에 존재하는 두개의 인수를 받는 생성자가 호출되도록

this->major = major;

cout << "Student생성자" << endl;

}

~Student() { cout << "Student소멸자" << endl; }

void setManjor(string major) { this->major = major; }

string getMajor() { return major; }


void print();

};


void Human::print()                                                                            //기본 클래스의 print() 멤버 함수

{

cout << getName() << "," << getAge() << endl;

}

void Student::print()                                                                            //파생 클래스의 print() 멤버함수 / print() member fuc of derived class

{

cout << getName() << "," << getAge() << "," << getMajor() << endl;

}


int main()

{

Human h1("춘향", 18);

Human h2("몽룡", 21);

Human h3("사또", 50);

h1.print();

h2.print();

h3.print();


Student s1("명진", 21, "컴퓨터");

Student s2("미현", 22, "경영");

Student s3("용준", 24, "전자");

s1.print();

s2.print();

s3.print();


return 0;

}



댓글