요즘 저는 VS2010에서 C++ 프로그래밍에서 OO를 배우고 있습니다. C++에서 기본적인 상속 문제를 만났습니다.C++의 몇 가지 기본 상속 문제
질문 1 :
class bs
{
public:
int a;
virtual void name(){};
};
class A:virtual public bs
{
public:
int a;
virtual void name(){};
};
class B:virtual public bs
{
public:
int a;
virtual void name(){};
};
class D:virtual public bs
{
public:
int a;
virtual void name(){};
};
class C:public A,public B,public D
{
};
컴파일러는 나에게 오류 C2250을 제공 여기 내 코드입니다. 각 클래스에서 가상 상속을 제거합니다. 즉
class bs
{
public:
int a;
virtual void name(){};
};
class A:public bs
{
public:
int a;
virtual void name(){};
};
class B:public bs
{
public:
int a;
virtual void name(){};
};
class D:public bs
{
public:
int a;
virtual void name(){};
};
class C:public A,public B,public D
{
};
이 적용됩니다. 또한, 오류 코드에서 C 클래스의 virtual void name(){};
을 다시 작성하면 컴파일러가 잘됩니다. 제 질문은 왜 가상 상속 상황에서 가상 함수를 다시 작성해야하는지, 그리고 가상 상속 상황에서는 불필요한 것입니다.
질문 2 : 위의 코드로
, 내가 아닌 가상 상속 상황
class bs
{
public:
int a;
virtual void name(){};
};
class A:public bs
{
public:
int a;
virtual void name(){};
};
class B:public bs
{
public:
int a;
virtual void name(){};
};
class D:public bs
{
public:
int a;
virtual void name(){};
};
class C:public A,public B,public D
{
virtual void name(){};
};
//bs *mybs = new C(); //C2594
컴파일러에 bs *mybs = new C();
를 추가 할 오류 C2594을 말한다. 그러나 가상 상속 상황에서 컴파일러에는 오류가 없습니다.
class bs
{
public:
int a;
virtual void name(){};
};
class A:virtual public bs
{
public:
int a;
virtual void name(){};
};
class B:virtual public bs
{
public:
int a;
virtual void name(){};
};
class D:virtual public bs
{
public:
int a;
virtual void name(){};
};
class C:public A,public B,public D
{
virtual void name(){};
};
bs *mybs = new C();//It is OK
가상 계승 상황은 어떻게됩니까?
이 두 가지 질문은 어렵지 않지만 C++에서는 기본이라고 생각합니다. 그러나 C++ 버전의 OO에 익숙하지 않습니다. 문제를 해결해 주셔서 감사합니다.
컴파일러 오류 텍스트를 게시하면 찾을 필요가 없습니다. – Melanie
http://msdn.microsoft.com/en-us/library/6fts3ys1.aspx, http://www.parashift.com/c++-faq/multiple-inheritance.html – Spook
내 VS2010이 버전이 아니므로 죄송합니다. 영어로.오류 문안은 다른 언어로되어 있습니다 : ( – zhfkt