2012-07-17 229 views
0

我試圖擴展使用敏捷庫的現有應用程序。該庫迫使我創建一個具體的接口類,InterfaceToA來連接我的應用程序。但是,在我的應用程序中,實例化此對象的最自然的地方(沒有主要的重構)在另一個類的內部,例如ClassA,實現。我真的需要接口類來訪問所有的數據和成員函數(繼承自)。因此,像:C++繼承和實例化依賴類

// 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++中,我一直試圖考慮使用繼承和嵌套類,但我可以很清楚如何繼續。

+0

而問題是?我完全不明白你有什麼問題,也許http://ideone.com/ZXils? – Arpegius 2012-07-17 22:16:18

+0

目前尚不清楚你的問題是什麼。通常像'InterfaceA'這樣的接口就是'ClassA'實現的。或者,接口可以包含'ClassA'的一個實例作爲成員,然後在類似'InterfaceToA :: g'的方法中使用該實例來計算結果。 – 2012-07-17 22:22:41

+0

我的問題是:我需要做什麼,並提出超過有效/合法? – johntfoster 2012-07-18 00:23:22

回答

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