如何从一个类调用另一个类的功能,无需遗产

问题描述:

所以在我们的分配的问题之一,我们的教授给了我们这个下面的代码片段,并要求我们,使其运行并执行它,使我们能够访问的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

如果你单独到这些.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(); 
} 
... 

#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)`

如何:

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