【问题标题】:c++ init member of superclass in constructor构造函数中超类的c ++ init成员
【发布时间】:2012-10-10 14:49:34
【问题描述】:

我不明白为什么我的成员没有初始化。我有这样的事情:

class A
{
  public:
    A() {member = 0;}
    int getMember() {return member;}
  protected:
    int member;
}

class B : public A
{
  public:
    B() : A() {member = 10;}
}

当我尝试从 B 获取 member 的值时,它始终为 0。 我在这里想念什么?

谢谢!

编辑:Ctor 现在是公开的。

【问题讨论】:

  • @chris:据我所知,这仍然会构造B 对象并将10 分配给member。不过,如果不是,我希望能有所启发。
  • 构造函数是私有的..所以我假设你不能有 new B();我有一段时间没学过 C++了。所以我可能是错的。
  • @LewsTherin:你是对的。这表明发布的代码不是真正的代码,在这种情况下,行为可能来自引用示例中未显示的方面。
  • 显示更多代码。从这小部分,谁也说不出来,只是猜测。
  • 这段代码,一旦你将 B() 公开,就可以正常工作,并按照你的预期去做。我假设您缺少的是代码中的其他地方;正如 Olaf 所说,没有更多代码我们无能为力。

标签: c++ constructor initialization member superclass


【解决方案1】:

我尝试了两件事,它们都给出了预期的结果:

class A
{
  public:
    A() {member = 0;}
    int getMember() {return member;}
  protected:
    int member;
};

class B : public A
{
public:
    B() : A() {member = 10;}
};

int main() {
    A* a = new B();
    cout << a->getMember() << endl;
    B b;
    cout << b.getMember() << endl;
    return 0;
}

这会返回

output:
10
10

您可以在http://ideone.com/FArIAC查看代码

【讨论】:

  • 我真的不知道出了什么问题,但现在它正在工作。也许编译器没有更新或其他什么。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-12-07
  • 2012-04-12
  • 1970-01-01
  • 2013-01-16
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多