<클래스 상속 형식>
class 파생클래스명 :상속접근제어 기본클래스명{ };class Dog : public Animal { };class Dog : Animal //C#, swift, kotlin class Dog extends Animal //java, php class Dog(Animal) //python
<상속 접근제어 속성에 따른 파생 클래스 멤버의 속성변화>
- 상속 접근제어 속성에 따라 기본 클래스 멤버의 속성이 파생 클래스에서 어떻게 변하는지를 나타낸다.
<public 상속 접근제어>
- public 상속 접근인 경우에는 기본 클래스의 모든 public, protected멤버들은 파생 클래스의 public, protected 멤버가 된다.
- 기본 클래스의 private 멤버는 private 멤버로 남고, 파생 클래스에 의해서 접근될 수 없다.
- 일반적으로 가장 많이 사용하는 상속 접근 제어이다.
<상속>
#include <iostream> using std::cout; using std::endl; class A // 기본 클래스 { int x; public: void setX(int i) {x = i;} void showX() { cout << x << endl;} }; class B:public A //파생 클래스 { //아무 것도 없어요. 그러나! }; int main() { A aa; aa.setX(1); aa.showX(); B bb; bb.setX(10); bb.showX(); return 0; }<실제로는 이렇게 가지고 있어요> class B:public A //파생 클래스 { public: void setX(int i) {x = i;} void showX() { cout << x << endl;} };
<public 상속 접근제어로 상속 1>
#include <iostream>
using std::cout;
using std::endl;
class A // 기본 클래스
{
int x;
public:
void setX(int i) { x = i; }
void showX() { cout << x << endl; }
};
class B :public A //파생 클래스
{
int y;
public:
void setY(int i) { y = i; }
void showY() { cout << y << endl; }
};
int main()
{
B bb; // 파생클래스의 객체
bb.setX(1);
bb.setY(2);
bb.showX(); // 기본클래스의 멤버접근
bb.showY(); // 파생클래스의 멤버접근
return 0;
}
<파생 클래스 B는 이렇게 보여야 해요!>
class B :public A
{
int y;
public:
void setX(int i) { x = i; }
void showX() { cout << x << endl; }
void setY(int i) { y = i; }
void showY() { cout << y << endl; }
};
<public 상속 접근제어로 상속 2>
#include <iostream> using std::cout; using std::endl; class A { int x; public: void setX(int i) { x = i; } void showX() { cout << x << endl; } }; class B :public A { int y; public: void setY(int i) { y = i; } void showXY() {showX(); cout << y << endl; } }; int main() { B bb; bb.setX(1); // 기본클래스의 멤버접근 bb.setY(2); // 파생클래스의 멤버접근 bb.showX(); // 기본클래스의 멤버접근 bb.showXY();// 파생클래스의 멤버접근 return 0; }