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

我能够弄清楚。我需要传递对ClassAinto的引用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 回答