c ++类实现接口,接口具有采用实现该接口的任何类的方法

时间:2019-02-10 07:42:06

标签: c++ interface

我正在用C ++实现自己的链接列表。下面的代码用于链表的迭代器部分。

class Iterator
{
public:
    virtual bool operator== (const Iterator &rhs) const = 0;
};

class LinkedListIterator : public Iterator
{
public:
    int fieldOnlyLinkedListIteratorHas;

    bool operator== (const Iterator &rhs) const
    {
        return fieldOnlyLinkedListIteratorHas == rhs.fieldOnlyLinkedListIteratorHas;
    }
};

我希望有一个Iterator接口,其中包含许多(将来的)迭代器也可以实现的一些常用方法。

根据您的猜测,在代码中rhs变量没有该字段,因此代码不会编译。但是我应该将其更改为什么?此代码也不起作用:

bool operator== (const Iterator &rhs) const
{
    LinkedListIterator &rhs2 = (LinkedListIterator)rhs;

    return fieldOnlyLinkedListIteratorHas == rhs2.fieldOnlyLinkedListIteratorHas;
}

这也不是:

bool operator== (const LinkedListIterator &rhs) const
{
    return fieldOnlyLinkedListIteratorHas == rhs.fieldOnlyLinkedListIteratorHas;
}

从那时起LinkedListIterator类是抽象的。

要在Java中解决此问题,我会使用instanceof,但如何在C ++中做到这一点?

1 个答案:

答案 0 :(得分:0)

dynamic_cast<>将为Java instanceof提供最等效的功能。这要求编译器启用RTTI

尽管,通常需要使用dynamic_cast <>表示可以改进设计。

bool operator== (const Iterator &rhs) const
{
    const LinkedListIterator *rhs2 = dynamic_cast<const LinkedListIterator *>(&rhs);
    if (rhs2) {
        return fieldOnlyLinkedListIteratorHas == rhs2->fieldOnlyLinkedListIteratorHas;
    }
    return false; // Is not an instance of LinkedListIterator, therefore must be !=.
}