상속에 대한 몇 가지 개념에 대해 의심 스럽습니다. 내가 아는 바를 말하고 있습니다. 내가 틀렸다면 나를 교정하십시오.간단한 상속 후 copy-constructor을 호출합니다.
기본 클래스의 전용 멤버는 파생 클래스에서 상속되지만 파생 클래스는 어떤 방식으로도 액세스 할 수 없습니다.
보호 된 기본 클래스 멤버는 파생 클래스에서 상속되지만 파생 클래스는 일부 멤버 함수를 통해 직접 액세스 할 수 없습니다. 다음 코드에서 이제
:
class A
{
protected:
A(const A&){}
A operator=(const A &){}
int t;
public:
A(int r) {t=r;}
A(){t=0;}
};
class B : public A
{
A a;
public:
void make(void)
{
//A b(a); //LINE 1 -------COPY CONSTRUCTOR BEING CALLED ---protected member of base class
cout<<t; //LINE 2 -------protected member of base class
}
};
int main()
{
B b;
b.make();
return 0;
}
왜 LINE 1 오류가오고있다?
왜 A 개체에 대해 복사 생성자를 호출 할 수 없습니까? 사전
의 다른 멤버 함수를 호출 할 수 있습니다 그것은 우리가 할 수 없음을 의미 파생 클래스에서 보호되는 경우 기본 클래스 객체를 만드시겠습니까? – Luv
생성자는 또한이 포인터를 사용합니다. 즉, 모든 기본 클래스 생성자가 보호되는 경우 기본 클래스의 파생 클래스로 객체를 만들 수 없습니다. – Luv
@Luv : 클래스의 모든 생성자가 보호 된 경우 이 클래스는 다른 클래스 유형의 기본 클래스로만 생성 될 수 있습니다. 파생 클래스는 기본 클래스 하위 객체에 대해 보호 된 생성자를 호출 할 수 있습니다. –