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 멤버 |
기초 클래스 인터페이스를 통해서만 접근 가능 |
기초 클래스 인터페이스를 통해서만 접근 가능 |
기초 클래스 인터페이스를 통해서만 접근 가능 |
암시적 업 캐스팅 |
가능 |
파생 클래스 안에서만 가능 |
불가능 |
댓글