在不同的类继承级别调用一系列函数

时间:2011-04-22 22:07:24

标签: c++ method-chaining

假设:

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()Bar包含Method1();

但是,由于返回类型,这似乎是一个坏主意 - 在第一次继承级别访问更简单的Method1()之前,调用更复杂的Method3()必须保持这个叫单线..

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

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

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

1 个答案:

答案 0 :(得分: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;
}