抽象基类,私有继承和多重公共继承

时间:2015-05-19 11:37:44

标签: c++ inheritance abstract multiple-inheritance

我有一个问题或误解。这里我有一些ABC(Person)也有两个私有派生的虚拟类(PokerPlayerGunslinger)。对于这一部分,一切都很完美,直到我必须声明一个派生自(BadDudePokerPlayer)的公共类(Gunslinger)。问题是=>。

1)

 BadDude::BadDude(const BadDude & obj) 
: Person::Person(obj) /*<- the problem*/, PokerPlayer(obj) , Gunslinger(obj) {}

2) 这也发生在operator=();

BadDude & BadDude::operator=(const BadDude & obj)
{
    if (this == & obj)
        return *this;

    Person::operator=(obj); //dose not work
    PokerPlayer::oprtr(obj);
    Gunslinger::oprtr(obj);

    return *this;
}

3) 我无法从BadDude的方法中获得受保护的ABC方法

void BadDude::Show()const
{
    Person::Data(); //the same problem
    Gunslinger::Data();
    PokerPlayer::Data();
}

这就是工作室对问题#1的说法

error C2436: '{ctor}' : member function or nested class in constructor initializer list

这就是工作室对问题#2的说法

 error C2249: 'Person::operator =' 
: no accessible path to private member declared in virtual base 'Gunslinger'

这就是工作室对问题#3的说法

error C2249: 'Person::Data' : no accessible path to private member declared in virtual base 'Gunslinger'

代码enter link description here

1 个答案:

答案 0 :(得分:0)

对于问题1:还有额外的Person::,它应该是

BadDude::BadDude(const BadDude & obj) : Person(obj), PokerPlayer(obj) , Gunslinger(obj) {}

对于可访问性问题,请使用受保护(或公共)继承:

class Gunslinger : virtual protected Person
{ /*...*/ };
class PokerPlayer : virtual protected Person
{ /*...*/ };