你如何在C ++中声明接口?

我如何设置一个表示接口的类? 这只是一个抽象的基类吗?


要扩展bradtgmurray的答案,您可能希望通过添加虚拟析构函数来为接口的纯虚拟方法列表创建一个例外。 这允许您将指针所有权传递给另一方,而不公开具体派生类。 析构函数不必做任何事情,因为接口没有任何具体成员。 将函数定义为虚拟函数和内联函数似乎是矛盾的,但相信我 - 事实并非如此。

class IDemo
{
    public:
        virtual ~IDemo() {}
        virtual void OverrideMe() = 0;
};

class Parent
{
    public:
        virtual ~Parent();
};

class Child : public Parent, public IDemo
{
    public:
        virtual void OverrideMe()
        {
            //do stuff
        }
};

你不必为虚拟析构函数包含一个主体 - 事实证明,一些编译器在优化一个空的析构函数时遇到了问题,你最好使用默认的。


用纯虚拟方法制作课堂。 通过创建另一个覆盖这些虚拟方法的类来使用该接口。

纯虚拟方法是一种定义为虚拟并分配给0的类方法。

class IDemo
{
    public:
        virtual ~IDemo() {}
        virtual void OverrideMe() = 0;
};

class Child : public IDemo
{
    public:
        virtual void OverrideMe()
        {
            //do stuff
        }
};

除了C#/ Java中的抽象基类以外,你有一个特殊的接口类型类的全部原因是因为C#/ Java不支持多继承。

C ++支持多重继承,因此不需要特殊类型。 没有非抽象(纯虚拟)方法的抽象基类在功能上等同于C#/ Java接口。

链接地址: http://www.djcxy.com/p/9197.html

上一篇: How do you declare an interface in C++?

下一篇: When to use interfaces or abstract classes? When to use both?