转自:http://blog.csdn.net/hanzhiwei1838/article/details/23354001
参考:https://msdn.microsoft.com/en-us/library/6b3sy7ae(VS.80).aspx
现在的编程词基本上都是那么拗口又晦涩的词,令人费解又讨厌。
警告:warning C4250,是我用特殊实验用的类专门报出来的,报的警报是中文:通过域控制继承
这个“域控制继承”怎么让人这么恶心,这么别扭,“域控制继承”?在网上找了半天解释,虽然解释的都是那么个意思,但看起来实在是别扭。最后找到MSDN的解释:
Error Message
'class1' : inherits 'class2::member' via dominance
看到这个,是不是还是那么恶心?
Two or more members have the same name. The one in class2 is inherited because it is a base class for the other classes that contained this member.
这个解释就浅显易懂了。
白话文的解释就是:师祖创了一套太极剑一套太极拳,大徒弟学的太极剑,二徒弟学的太极拳。刚入门的徒孙,要学太极剑找大徒弟,要学太极拳找二徒弟。
喜欢的话,可以#pragma warning(disable:4250)
有时候看书,英文原版要比国内的翻译通俗易懂的多。
看看实验用的代码:
class CVirtualBase
{
public:
CVirtualBase(void){};
virtual ~CVirtualBase(void){};
public:
virtual void print(){std::cout<<"VirtualBase<<std::endl";};
virtual void print1(){std::cout<<"VirtualBase::print1()<<std::endl";};
virtual void print2(){std::cout<<"VirtualBase::print2()<<std::endl";};
};
class CVirtualDerive1 :public virtual CVirtualBase
{
public:
CVirtualDerive1(void){};
virtual ~CVirtualDerive1(void){};
virtual void print(){std::cout<<"CVirtualDerive1"<<std::endl;};
virtual void print1(){std::cout<<"CVirtualDerive1::Print1"<<std::endl;};
// virtual void print2();
};
class CVirtualDerive2 :
public virtual CVirtualBase
{
public:
CVirtualDerive2(void){};
virtual ~CVirtualDerive2(void){};
virtual void print(){std::cout<<"CVirtualDerive2"<<std::endl;};
virtual void print2(){std::cout<<"CVirtualDerive2::Print2"<<std::endl;};
// virtual void print1(){};
};
class CDeriveChild :
public CVirtualDerive1, public CVirtualDerive2
{
public:
CDeriveChild(void){};
virtual ~CDeriveChild(void){};
virtual void print(){std::cout<<"CDeriveChild"<<std::endl;};
};
int _tmain(int argc, _TCHAR* argv[])
{
CVirtualBase *pDerChild = new CDeriveChild();
pDerChild->print();
pDerChild->print1();
pDerChild->print2();
system("pause");
return 0;
}