개발 소발/개발 C++(기초)
c++ 상속과 접근지정자
우기!
2019. 8. 30. 15:20
상속과 접근지정자
클래스에서 접근지정자로 접근권한을 제한할 수 있다.
상속도 마찬가지로 접근지정자로 제어할 수 있다.
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;
}