代码之家  ›  专栏  ›  技术社区  ›  Gary Paluk

在C++中的方法声明之后附加'= x'

  •  3
  • Gary Paluk  · 技术社区  · 15 年前

    在C++中,当声明一个方法时,我注意到有时该方法可能有一个附加的赋值。

    有人能告诉我这是什么吗?

    例如:

    virtual void MyMethod () = 0;
    

    “=0”是什么意思?:)

    谢谢大家!!!!

    3 回复  |  直到 15 年前
        1
  •  6
  •   Jakob Borg    15 年前

    它意味着它是一个纯粹的虚拟函数,也就是说,在这个类中没有它的实际定义,而且它 必须 在子类中被重写。它实际上不是一个赋值,零是唯一可以“赋值”的值。

    这是C++语法;在C语言中,同样可以用 abstract 关键字。

        2
  •  4
  •   UncleBens    15 年前

    在C++中,这意味着该方法是一种纯虚拟方法。

    这意味着无法实例化此特定类类型的实例。只能创建由此派生的类的实例,这些实例将覆盖基类中的所有纯虚拟方法。

    具有纯虚方法的基类定义了派生类的接口 实现,而不是单独使用。


    与卡尔姆所说的相反,据我所知,纯粹的虚函数 可以 实现并可以显式调用它们。

    #include <cstdio>
    
    class A
    {
    public:
        virtual void foo() const = 0; //pure virtual
    };
    
    void A::foo() const { puts("A::foo"); }
    
    class B: public A
    {
    public:
        virtual void foo() const { puts("B::foo"); }
    };
    
    int main()
    {
        //A a;  //this would be an error - main point of having pure virtual functions
        B b;
        b.foo();
        b.A::foo();
    }
    

    不过,通常不会这样做,除非虚拟析构函数在基类中是纯的(在本例中必须定义它)。

        3
  •  2
  •   James Curran    15 年前

    在C中,这是一个语法错误。

    如果你的意思是C++,请看Calm的答案。

    推荐文章