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()、機能しBarますMethod1()

しかし、戻り型のため、これは悪い考えのようです-より複雑なを呼び出す前に最初の継承レベルでより単純にアクセスしMethod1()この呼び出しを1行に保持する必要がある場合。Method3()

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

また、誰かが私にtry.. catch.. throw、それらの1つに入れる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 に答える