C++ private상속, protected 상속을 정리하며

프로그래밍/C++ 2019.10.24 댓글 Plorence

private 상속이나 protected 상속이 됐을 때 기초 클래스의 멤버들은 private나 protected가 될 겁니다.

이 둘의 공통점은 외부에서 접근이 불가능하다는 건데 public으로 사용하고 싶은 경우도 있을 겁니다.

 

데이터 은닉에서 했던 것과 비슷한 방법

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <valarray>
using namespace std;
class Student : private valarray<double> {
public:
        Student() : valarray<double>(3) { //멤버 초기자 리스트로 초기화
               
        }
        int Size() {
               return valarray<double>::size();
        }
        
};
int main(void) {
        Student stu = Student();
        cout << stu.Size();
}

 

using사용

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <valarray>
using namespace std;
class Student : private valarray<double> {
public:
        Student() : valarray<double>(3) { //멤버 초기자 리스트로 초기화
               
        }
        using valarray<double>::size;
        
};
int main(void) {
        Student stu = Student();
        cout << stu.size();
}

using선언은 소괄호, 함수 시그니처, 리턴형 없이 멤버 이름만 사용합니다.

이 방법은 상속에서만 적용됩니다.(컨테인먼트는 안됨.)

 

재선 언

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <valarray>
using namespace std;
class Student : private valarray<double> {
public:
        Student() : valarray<double>(3) { //멤버 초기자 리스트로 초기화
               
        }
        valarray<double>::size;
        
};
int main(void) {
        Student stu = Student();
        cout << stu.size();
}

이 방식은 원래의 의도를 퇴색시키기 때문에 그리 좋은 방법은 아닙니다.

 

public, protected, private 상속 정리표

특성

public상속

protected상속

private상속

public 멤버

파생 클래스의 public 멤버

파생 클래스의 protected 멤버

파생 클래스의 private 멤버

protected 멤버

파생 클래스의 protected 멤버

파생 클래스의 protected 멤버

파생 클래스의 private 멤버

private 멤버

기초 클래스 인터페이스를 통해서만 접근 가능

기초 클래스 인터페이스를 통해서만 접근 가능

기초 클래스 인터페이스를 통해서만 접근 가능

암시적 업 캐스팅

가능

파생 클래스 안에서만 가능

불가능

 

댓글