【问题标题】:can a pure virtual function has parameters?纯虚函数可以有参数吗?
【发布时间】:2018-08-05 23:58:40
【问题描述】:

如果我有一个类“Card”(基类)“CardOfType1”(派生类)和一个名为“Player”的类,该类具有指向“CardOfType1”的“Card”类型指针。有没有可能我们有一个名为“playCard(PlayerenemyPlayer)”的纯虚函数?

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

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
//.
//.
//.

};

【问题讨论】:

  • 是的,你可以...
  • 当然可以,否则在大多数情况下它几乎没用。哦,在创建 Minimal, Complete, and Verifiable Example 时(即使是像您所做的那样小且不完整(在少数情况下也可以))尝试使其尽可能完整和有效,包括正确继承。
  • 几分钟前你还问了一个不同的问题,我无法想象你对这个主题做了任何好的研究。请在提问之前先这样做。
  • 你为什么会这么想?
  • 究竟是什么让你怀疑我们不能?

标签: c++ parameters polymorphism virtual-functions pure-virtual


【解决方案1】:

是的,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 { };
};

【讨论】:

  • 不完全; =0 和“没有主体”不是互斥的。一个可以有virtual void playCard(Player derp) = 0 {std::cout &lt;&lt; "here";} this问题可能有用
  • @UKMonkey 我的意思是在base class 一个PVF 不能有身体,在相应的derived class 它应该有。如果我错了,请纠正我
  • @UKMonkey 不在同一个声明中。
  • @achal 你可以为 PVF 提供一个实现,但它必须是离线的(即不作为类内声明的一部分)。
  • @Angew 非常感谢 - 谢谢 :) 虽然我认为 VS 过去允许我内联执行 - 但 VS 所做的和标准所说的并不总是相同的 ;)跨度>
猜你喜欢
  • 2011-04-01
  • 2016-02-05
  • 2020-01-30
  • 2019-12-14
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 2018-08-10
  • 2016-07-22
相关资源
最近更新 更多