相关疑难解决方法(0)

在构造函数中调用虚函数

假设我有两个C++类:

class A
{
public:
  A() { fn(); }

  virtual void fn() { _n = 1; }
  int getn() { return _n; }

protected:
  int _n;
};

class B : public A
{
public:
  B() : A() {}

  virtual void fn() { _n = 2; }
};
Run Code Online (Sandbox Code Playgroud)

如果我写下面的代码:

int main()
{
  B b;
  int n = b.getn();
}
Run Code Online (Sandbox Code Playgroud)

人们可能期望将n其设置为2.

事实证明,n设置为1.为什么?

c++ constructor overriding virtual-functions

220
推荐指数
6
解决办法
9万
查看次数

我可以从派生类的默认构造函数中将参数传递给基础构造函数吗?

假设我有一个抽象基类Deck:

public abstract class Deck
{
   public List<Card> cards;

   public Deck(string[] values, string[] suits)
   {...}

   ...
}
Run Code Online (Sandbox Code Playgroud)

和派生类EuchreDeck:

public class EuchreDeck : Deck
{
   string[] values = new string[] { "9", "10", "J", "Q", "K", "A" };
   string[] suits = new string[] { "clubs", "spades", "hearts", "diamonds" };

   public EuchreDeck() : base(values, suits) // Error.
   {}

   ...
}
Run Code Online (Sandbox Code Playgroud)

我希望能够实例化EuchreDeck并将两个字符串数组传递给基类,即var gameDeck = new EuchreDeck();.

目前我收到错误:"非静态字段,方法或属性需要对象引用EuchreDeck.values."

这是可能的,还是调用派生的默认构造函数总是调用基本的默认构造函数?

c# constructor abstract-class derived-class

7
推荐指数
1
解决办法
8453
查看次数