1
이 코드는 '밀봉'클래스 구현을 건너 왔을 때 나는 http://www2.research.att.com/~bs/bs_faq2.html에 C++ FAQ를 읽고 있었다 : 가상 키워드를 사용하여, '봉인 방법봉인 클래스 구현 쿼리
class Base{
public:
friend class A;
private:
Base(){cout<<"Base constructor called";}
};
class A : public virtual Base{
public:
A(){cout<<"A const called";}
};
class B : private A{};
int main(){
A a;
//B b;
return EXIT_SUCCESS;
}
내가 이해하지 못했다을 '클래스 효과가 달성됩니다. 가상 키워드를 제거하면 '봉인 된'효과가 없습니다. 왜?
우리는 실제로 public virtual Base라고 말하면서 무엇을 말하고 있습니까? – badmaash
@Abhi : Base가 사실상 상속되었다는 것입니다. 즉, A에서 파생 된 클래스와 Base에서 상속받은 다른 클래스의 경우 Base의 복사본이 여러 개가 아니라 여러 개가 있고 Base의 인스턴스는 대부분의 파생 클래스. 매우 복잡한 주제입니다. – Puppy
개인 상속을 사용하면 어떻게됩니까? 개인 상속은 여기에서 괜찮습니까? 사실, 나는'private virtual' 상속이 잘 작동하는지 테스트했습니다. 그래서 사적 상속을 사용하는 것이 더 합리적 일 것이라고 생각합니다. 어떤 것은'A' 객체를 조작하기 위해'Base * '를 사용하기를 원하지 않는다. Base 클래스는 OOP 용으로 설계되지 않았다. 그것은 단지 유틸리티 일뿐입니다. Plz 주석. – zoujyjs