상속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;
}
댓글