在使用__interface关键字时,如何使编译器为定义方法体的类发出错误?

Rob*_*ide 1 c++ abstract-class interface visual-c++

阅读本文后:在C++中使用接口

我决定使用__interface带有宏的关键字来添加虚拟析构函数,如上面的链接所述.

我很高兴__interface关键字会导致编译器强制执行接口规则,但是当我把它用于测试驱动器时我很失望...事实证明__interface关键字没有强制执行接口中的方法不应该包含的规则方法体.

我当然可以为函数方法添加一个宏,但我不想这样做.有没有人有任何其他建议?

编辑:可移植性对我来说是一个无问题,因为我必须在Windows和Linux上编译所以我将使用__interface关键字,当我在Windows上而不是在Linux上,这将是为了执行以下规则,这不能通过抽象基类强制执行:

  1. 可以从零个或多个基接口继承.
  2. 只能包含公共的纯虚方法.
  3. 不能包含数据成员; 属性是允许的.
  4. 无法从基类继承.
  5. 不能包含构造函数,析构函数或运算符.
  6. 不能包含静态方法.

除了可以解决方法的析构函数问题之外,当然可以看到在windows环境中使用此关键字的优势.

Alo*_*ave 6

标准C++中没有与Java相同的接口关键字,C++中的所有内容都是抽象基类.

抽象基类是一个具有至少一个纯虚函数的类,并且不能创建这样的类的对象,但可以创建指向它的指针或引用.因此,它可以用于模拟接口的行为.

Abstract类的示例作为接口

class Shape
{
    public:
        virtual void draw()=0;
};

class Rectangle:public Shape
{

    public:
       void draw()
       {
           //draw a Rectangle
       }    
};


int main()
{
    Shape *ptr = new Rectangle();
    ptr->draw();  //calls draw() of Rectangle class

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

注意:

__interface关键字作为C++编译器的新Microsoft扩展.
这是非C++标准指定和非可移植.

编辑:这个答案是一个标题为" __interface关键字Win c ++ "的问题并被标记C++.

  • **没有"WIN C++"这样的东西.**正如Als所解释的那样,这是Microsoft的C/C++编译器提供的编译器扩展.它与Windows无关,它绝对不是*C++的一部分. (2认同)