依赖类的C++继承和实例化

C++ inheritance and instantiation of depended classes

本文关键字:实例化 继承 C++ 依赖      更新时间:2023-10-16

我正在尝试使用敏捷库来扩展现有的应用程序。该库迫使我创建一个具体的接口类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++中可能吗?我一直在尝试使用继承类和嵌套类来考虑这一点,但我很清楚如何进行。

我想明白了。我需要将对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;
}