假设我有两个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.为什么?
假设我有一个抽象基类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."
这是可能的,还是调用派生的默认构造函数总是调用基本的默认构造函数?