상속과 접근지정자
클래스에서 접근지정자로 접근권한을 제한할 수 있다.
상속도 마찬가지로 접근지정자로 제어할 수 있다.
protected는 외부에선 접근 불가능하지만 자식클래스에서 접근가능하다.
유도된 클래스(자식클래스)에 새로운 기능 추가할때
protected를 사용하면 private 변수일때 public에 getValue()를 만들어 사용하지않고 퍼포먼스를 향상시킬 수 있다.
#include <iostream>
using namespace std;
class Base {
protected:
int m_public;
public:
Base(const int & a)
:m_public(a){
}
};
class Derived : public Base
{
public:
Derived(const int & a)
:Base(a){
}
void setValue(int value) {
Base::m_public + value;
}
};
int main()
{
return 0;
}
다중상속일때 단계가 높은 부모클래스에 접근하지 못하게할때 사용한다.
즉, private 으로 상속하면 다중상속일때 하하위 클래스가 직접접근하지 못하게한다.
#include <iostream>
using namespace std;
class Base {
public:
int m_public;
int funPublic() {
return 0;
}
protected:
int m_protected;
int funProtected() {
return 0;
}
private:
int m_private;
};
class Derived : public Base
{
public:
Derived() {
m_public = 123;
m_protected = 123;
//m_private = 123;
funPublic();
funProtected();
}
};
class Derived2 : protected Base
{
public:
int a;
Derived2() {
m_public = 123;
m_protected = 123;
//m_private = 123;
a = funPublic();
a = funProtected();
}
protected:
int a2 = 0;
};
class Derived3 : private Base
{
public:
int a;
Derived3() {
m_public = 123;
m_protected = 123;
//m_private = 123;
a = funPublic();
a = funProtected();
}
};
class GrandChild : public Derived3 {
public:
GrandChild() {
//m_public; 불가능하다
cout << a << endl;
}
};
int main()
{
Derived der;
der.m_public = 123;
//base.m_protected = 123;
//base.m_private = 123;
//protected 상속
Derived2 der2;
//der.m_public = 123;
//private 상속
Derived3 der3;
//der.m_public = 123;
return 0;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ 다형성의 기본개념 (0) | 2019.09.23 |
---|---|
c++ 상속받은 함수를 오버라이딩하기 (0) | 2019.08.30 |
c++ 상속 유도된 클래스들의 생성과 초기화 (0) | 2019.08.30 |
c++ 상속 유도된 클래스들의 생성순서 (0) | 2019.08.30 |
c++ 상속의 기본2(기본구현) (0) | 2019.08.29 |