2

我有一个A要扩展的基类X。里面A还有另一个类,B。似乎没有定义虚拟方法,但我不明白为什么?

class A {
 public:
  class B {public: bool value;};

  A() {}
  B b_;
  void DoStuff(B& b);
 private:
  virtual void DoStuffImpl(B& b) = 0;
};

class X : public A {
 public:
  X() {}
  void Trigger();
 private:
  virtual void DoStuffImpl(B& b);
};

void A::DoStuff(B& b) {
     DoStuffImpl(b);
}

void X::Trigger() {
    DoStuff(b_);
}
void X::DoStuffImpl(B& b) {
    b.value = true;
}

int main(){
    X x;
    x.Trigger();
    return x.b_.value;
}

PS 这是因为我的代码有不同的问题,但我什至无法让这个玩具示例工作,所以现在我有这个让我很好奇......

这是上面代码的链接,它正在编译并且无法运行:http: //ideone.com/mBJ1Kg

4

1 回答 1

7

它运行良好。ideone 报告退出代码为 1 的“运行时错误”,因为您1main. 非零返回码通常被认为是失败。

如果您注释掉您的return x.b_.value行并将其替换为,return 0那么一切都很好

您可以在其中放置一些std::cout行以查看发生了什么,并查看程序是否有效!:D

于 2012-11-09T18:00:14.960 回答