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

时间:2012-07-17 21:42:53

标签: c++ inheritance nested-class

我正在尝试使用敏捷库扩展现有应用程序。该库迫使我创建一个具体的接口类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;
}

在这种情况下,预期output3(5+1) - (1+3) + 1 = 3。这在C ++中是否可行,我一直在尝试使用继承和嵌套类来考虑这个问题,但我可以完全弄清楚如何继续。

1 个答案:

答案 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;
}