728x90
상속이란?
A클래스가 B클래스를 상속하게 되면, A는 B가 가지고 있는 모든 멤버를 물려받는다.
즉, A는 A멤버 + B멤버도 같이 가지게 됨.
#include <iostream>
#include <cstring>
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클래스의 상속을 의미
{
private:
char major[50]; //전공과목
public:
UnivStudent(char *myname, int myage, char *mymajor)
:Person(myage, myname)
{
strcpy(major, mymajor);
}
void WhoAreYou() const
{
WhatYourName(); //Person의 멤버함수이기에 호출 가능!
HowOldAreYou();
cout <<"My major is "<<major <<endl <<endl;
}
};
int main(void)
{
UnivStudent ustd1("Lee", 22, "Computer eng.");
ustd1.WhoAreYou();
UnivStudent ustd2("Yoon", 21, "Electronic eng.");
ustd2.WhoAreYou();
return 0;
}
1.용어의 정리
Person <-> UnivStudent
상위 클래스 하위 클래스
기초(base)클래스 유도(derived)클래스
슈퍼(super)클래스 서브(sub)클래스
부모 클래스 자식 클래스
2.유도클래스의 객체 생성과정
#include <iostream>
using namespace std;
class SoBase
{
private:
int baseNum;
public:
SoBase(): baseNum(20)
{
cout <<"SoBase()" <<endl;
}
SoBase(int n): baseNum(n)
{
cout <<"SoBase(int n)" <<endl;
}
void ShowBaseData()
{
cout << baseNum <<endl;
}
};
class SoDerived:public SoBase
{
private:
int derivNum;
public:
SoDerived() : derivNum(30)
{
cout <<"SoDerived()" <<endl;
}
SoDerived(int n) : derivNum(n)
{
cout <<"SoDerived(int n)" <<endl;
}
SoDerived(int n1, int n2) : SoBase(n1), derivNum(n2)
{
cout <<"SoDerived(int n1, int n2)" <<endl;
}
void ShowDerivData()
{
ShowBaseData();
cout <<derivNum <<endl;
}
};
int main(void)
{
cout <<"case1...." <<endl;
SoDerived dr1;
dr1.ShowDerivData();
cout <<"------------------" <<endl;
cout <<"case2...." <<endl;
SoDerived dr2(12);
dr2.ShowDerivData();
cout <<"------------------" <<endl;
cout <<"case3...." <<endl;
SoDerived dr3(23, 24);
dr3.ShowDerivData();
return 0;
}
1) 유도클래스의 객체 생성과정에서 기초 클래스의 생성자는 100% 호출됨 (SoBase())
2) 유도클래스의 생성자에서 기초 클래스의 생성자 호출을 명시하지 않으면, 기초클래스의 void생성자가 호출됨
1)유도 클래스의 객체가 소멸될 때에는, 유도클래스의 소멸자가 실행되고 난 다음에 기초클래스의 소멸자가 실행된다.
2)스택에 생성된 객체의 소멸순서는 생성순서와 반대.
728x90
'LANG > C++' 카테고리의 다른 글
[C++]07-4.상속을 위한 조건 (0) | 2023.05.14 |
---|---|
[C++]07-3.protected선언과 세 가지 형태의 상속 (0) | 2023.05.14 |
[C++]07-1.상속에 들어가기에 앞서 (0) | 2023.05.14 |
[C++]06-3.C++에서의 static (1) | 2023.05.13 |
[C++]06-2.클래스와 함수에 대한 friend 선언 (0) | 2023.05.13 |