0

我正在学习 C++,在学校作业中我必须使用菱形结构,即使它不完全正确。

class Book
{
    public:
        virtual int getPurchasePrice() const;
    protected:
        int m_purchasePrice;
};
class AdultBook: virtual public Book{} ;
class ChildrenBook: virtual public Book{} ;
class ComicBook: public AdultBook, public ChildrenBook {} ;

(我删除了所有方法和构造函数以简化)

现在,如果我想创建一本漫画书并知道它的购买价格,我该怎么办?如果我在 ComicBook 上执行 getPurchasePrice(),则会收到以下错误:

error: request for member 'getPurchasePrice' is ambiguous

我认为为 ChildrenBook 和 AdultBook 设置虚拟可以解决歧义?

4

2 回答 2

2

你使用任何一个

obj->AdultBook::getPurchasePrice();

或者

obj->ChildrenBook::getPurchasePrice();

或者

obj->Book::getPurchasePrice();

对于obj类型ComicBook

为埃米利奥·加拉瓦利亚编辑

假设您没有getPurchasePrice为成人和儿童书重新定义,您可以拥有这个

Key A - 成人书,C - 儿童书,CB - 漫画书,B - 书籍

在此处输入图像描述

于 2012-11-05T12:54:24.530 回答
2

这很可能是因为在和getPurchasePrice中都实现了,而不是在 中实现,它为同一个虚函数继承了两个不同的实现。AdultBookChildrenBookComicBook

您还必须覆盖getPurchasePriceComicBook,并最终通过调用两个基础之一来实现。

于 2012-11-05T12:54:27.260 回答