C++的 warning C4250

来源:互联网 发布:音量放大器软件 编辑:程序博客网 时间:2024/04/30 20:26

现在的编程词基本上都是那么拗口又晦涩的词,令人费解又讨厌。

警告: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;
}



1 0
原创粉丝点击