3

鉴于:

class Foo {
 public:
   void Method1();
}
class Bar extends Foo {
 public:
   Bar* Method2();
}
class Baz extends Bar {
 public:
   Baz* Method3();
}

所以,

someObject *b = new Baz();
b->Method3()->Method2()->Method1();

这将起作用,因为Baz()包含所有方法,包括Method2(), Barcontains Method1();

但是,由于返回类型,这似乎是一个坏主意 -Method1()在调用更复杂之前在第一个继承级别访问更简单时Method3()并且必须将此调用保持在单行中。

b->Method1()->Method2()->Method(3); // will not work?

另外,有人告诉我,将其中一个放入try.. catch.. throw其中Method's偶尔会退出链,而不会以错误的值调用 next 方法。这是真的?

那么如何在 C++ 中正确实现方法链呢?

4

1 回答 1

2

这就是虚方法的用途。从我收集到的语法错误中,您是 C++ 新手

struct Base
{
    virtual Base* One() { return this; };
    void TemplateMethod() { this->One(); }
};

struct Derived : public Base
{
    virtual Base* One() { /* do something */ return Base::One(); }
};

当您调用 TemplateMethod 时:

int main() 
{ 

      Base* d = new Derived();
      d->TemplateMethod(); // *will* call Derived::One() because it's virtual

      delete d;

      return 0;
}
于 2011-04-22T22:12:22.330 回答