如何从没有INHERITANCE的类中调用另一个类的函数

时间:2014-12-03 01:35:41

标签: c++ class object member

因此,对于我们的任务中的一个问题,我们的教授给了我们以下代码片段,并要求我们让它运行并实现它,以便我们能够从class1访问class2的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;
}

3 个答案:

答案 0 :(得分: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();
}
...

答案 1 :(得分: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;
}

更安全的方法是将print()作为常量函数: void print()const {}

并将c2作为const引用传递给     void accessclass2(const class2&amp; cl2)`

答案 2 :(得分: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();
    }