您的位置:首页 > 其它

What does it mean to “delegate to a sister class” via virtual inheritance?

2016-01-06 09:46 387 查看
Consider the following example:

class Base {
public:
virtual void foo() = 0;
virtual void bar() = 0;
};

class Der1 : public virtual Base {
public:
virtual void foo();
};

void Der1::foo()
{ bar(); }

class Der2 : public virtual Base {
public:
virtual void bar();
};

class Join : public Der1, public Der2 {
public:
// ...
};

int main()
{
Join* p1 = new Join();
Der1* p2 = p1;
Base* p3 = p1;

p1->foo();
p2->foo();
p3->foo();
}


Believe it or not, when
Der1::foo()
calls
this->bar()
, it ends up calling
Der2::bar()
. Yes, that’s right: a class that
Der1
knows nothing about will supply the override of a virtual function invoked by
Der1::foo()
. This “cross delegation” can be a powerful technique for customizing the behavior of polymorphic classes.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: