假设:
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 ++中正确实现方法链?
答案 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;
}