我正在尝试使用敏捷库扩展现有应用程序。该库迫使我创建一个具体的接口类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 ++中是否可行,我一直在尝试使用继承和嵌套类来考虑这个问题,但我可以完全弄清楚如何继续。
答案 0 :(得分: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;
}