0

アジャイルライブラリを使用して既存のアプリケーションを拡張しようとしています。ライブラリは、アプリケーションにインターフェイスするために、具体的なインターフェイスクラスを作成するように強制しInterfaceToAます。ただし、私のアプリケーション内では、このオブジェクトをインスタンス化するための最も自然な場所(主要なリファクタリングなし)は、別のクラスのClassA実装内です。ClassAすべてのデータとメンバー関数にもアクセスできるようにするには、インターフェイスクラスが本当に必要です(継承元)。だから次のようなもの:

// Class declarations
class ClassA {
  public:
     double thing1;
     double thing2;
     f( double arg1, double arg2 );
     ff()
};

class InterfaceToA : public ClassA {
  public:
     g( double arg1, double arg2 );
};

// Class implementations
double ClassA::f( double arg1, double arg2 ){
    InterfaceToA interface;
    return interface.g(arg1,arg2);
}

double ClassA::ff(){
    return 1;
}

double InterfaceToA::g( double arg1, double arg2 ){
    return (arg1 + thing1) - (arg2 + thing2) + ff();
}

//Main function
int main(){
    ClassA myClassA;

    myClassA.thing1 = 1;
    myClassA.thing2 = 3;

    double output;

    output = myClassA.f(5,1);

    std::cout << str(output) << std::endl;

    return 0;
}

この場合、期待さoutputれるのは3(5+1) - (1+3) + 1 = 3です。これはC++で可能ですか?私は継承クラスとネストされたクラスの両方を使用してこれについて考えようとしてきましたが、どのように進めるかはかなり理解できます。

4

1 に答える 1

0

私はそれを理解することができました。への参照をに渡す必要がありClassAましたInterfaceToA::g。最終的なコンパイル可能なコードは以下のとおりです

#include<iostream>

// Class declarations
class ClassA {
  public:
    double thing1;
    double thing2;
    double f( double arg1, double arg2 );
    double ff();
};

class InterfaceToA : public ClassA {
  public:
    double g( ClassA &myClass, double arg1, double arg2 );
};

// Class implementations
double ClassA::f( double arg1, double arg2 ){
    InterfaceToA interface;
    return interface.g(*this,arg1,arg2);
}

double ClassA::ff(){
   return 1;
}

double InterfaceToA::g( ClassA & myClass, double arg1, double arg2 ){
    return (arg1 + myClass.thing1) - (arg2 + myClass.thing2) + myClass.ff();
}

//Main function
int main(){
    ClassA myClassA;

    myClassA.thing1 = 1;
    myClassA.thing2 = 3;

    double output;

    output = myClassA.f(5,1);

    std::cout << output << std::endl;

    return 0;
}
于 2012-07-18T13:50:59.677 に答える