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