상속접근제어

구대호·2021년 11월 19일

<클래스 상속 형식>

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;
}
profile
개발 초보 대학생

0개의 댓글