2014-12-03 48 views
1

所以在我們的分配的問題之一,我們的教授給了我們這個下面的代碼片段,並要求我們,使其運行並執行它,使我們能夠訪問的Class2的來自class1的print()函數。如何從一個類調用另一個類的功能,無需遺產

然而,我們必須做到這一點,而無需使用兩個類,我有麻煩之間的繼承/匯聚/組成。除此之外,我們可以修改任何代碼以使代碼可以運行。感謝任何能夠幫助的人!

#include <iostream> 
using namespace std; 

class class1 { 
public: 
    int x; 
    class1() 
    { 
     x = 0; 
    } 
    void accessclass2(/* to be implemented*/) 
    { 
     //call the print() function from class2 
    } 
}; 

class class2 { 
public: 
    int y; 
    class2() 
    { 
     y = 10; 
    } 
    void print() 
    { 
     cout << y << endl; 
    } 
}; 

int main() 
{ //to be implemented; 
    //create class1 and class2 objects and access the print() function 
    return 0; 
} 
+4

這個問題似乎是題外話,因爲它是一門功課問題,問的答案。沒有顯示之前的工作。 – 2014-12-03 02:23:55

回答

2

如果你單獨到這些.HPP和.cpp文件,那麼你可以轉發聲明class2和指針傳遞給accessclass2

class1.hpp:

... 
class class2;// forward declaration 
... 
class class1 
{ 
    ... 
    void accessclass2(class2 *x); 
    ... 
}; 

class1.cpp:

... 
void class1::accessclass2(class2 *x) 
{ 
    x->print(); 
} 
... 
2
#include <iostream> 
using namespace std; 


class class2 { 
public: 
    int y; 
    class2() 
    { 
     y = 10; 
    } 
    void print() const 
    { 
     cout << y << endl; 
    } 
}; 

class class1 { 
public: 
    int x; 
    class1() 
    { 
     x = 0; 
    } 
    void accessclass2(const class2 & cl2) 
    { 
     cl2.print(); 
    } 
}; 

int main() 
{ 
    class2 c2 = class2(); 
    class1 c1 = class1(); 
    c1.accessclass2(c2); 
    return 0; 
} 

更安全的方法是使打印(),其爲常數函數:無效打印()const的{}

並通過C2爲const引用作爲 無效accessclass2(常量類class2 & CL2)`

1

如何:

int main() 
{ 
    //create class1 and class2 objects and access the print() function 
    class2 c2Object; 
    C2Object.print(); 

    // Oh, you want to use class2::print() from within class1? Ok: 
    class1 c1Object; 
    c1Object.accessclass2(&c2Object); 
} 

// In class2's implementation: 
    void accessclass2(class2 *pClass2Object) 
    { 
     //call the print() function from class2 
     pClass2Object->print(); 
    }