代码之家  ›  专栏  ›  技术社区  ›  Talha Khan

纯虚函数可以有参数吗?

  •  -6
  • Talha Khan  · 技术社区  · 8 年前

    如果我有一个类“Card”(基类)“CardOfType1”(派生类)和一个名为“Player”的类,其指针类型为“Card”,指的是“CardOfType1”。我们是否有可能拥有一个名为“playCard(Player enemyPlayer)”的纯虚拟功能?

    为了更好地理解,下面给出了代码

    class Card
    {
    public:
        virtual void playCard(Player enemyPlayer) = 0;
    };
    
    class CardOfType1
    {
    public:
        void playCard(Player enemyPlayer)
        {
             //Some Code Goes here
        }
    };
    
    class Player
    {
    stack<Card *> deckOfCards
    //.
    //.
    //.
    
    };
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Achal    8 年前

    是的,a PVF 可以有参数。

    virtual void playCard(Player enemyPlayer) = 0;
    

    在这里 = 0 (不是赋值),我们只是通知编译器函数将 pure 并且没有任何主体(在该类中声明主体的位置),但它可以有参数。

    从n4659 C++ 标准

    纯虚函数只有在使用或作为调用时才需要定义 使用(15.4),限定id语法(8.1)。

    class shape {
      point center;
      public:
      virtual void rotate(int) = 0; // pure virtual
      virtual void draw() = 0; // pure virtual
    };
    

    但还有另一个观察结果

    函数声明不能同时提供纯说明符和 定义-结束注释]

    struct C {
       virtual void f() = 0 { };
    };