我试图弄清楚如何使用指针从两个彼此相等的类中设置一个对象(请参见代码中的粗体)。应该为第1类(a,b)的私有成员分配由第2类成员(x,y)指向的值。
我尝试使用好友,但是我不确定这是分配成员的正确方法。
using namespace std;
class Class1
{
private: int a;
int b;
};
class Class2
{
private: int *x;
int *y;
};
int main() {
Class2 Object2;
**Class1 Object1 = Object2;**
return 0;
}
这只需执行即可而不会出错。
答案 0 :(得分:0)
我将把您的示例减少到演示此示例所需的最低限度。假设我们有以下两个类:
class A {
int x = 1;
friend class B;
};
class B {
int y = 2;
};
我们说过B
是A
的朋友,因此可以访问它的内部信息:
int main(){
A a;
B b;
b.y = a.x;
}
您可能认为这可行,这可能是您尝试过的;但是,我们正在尝试从a.x
内部访问main
,并且main
不是A
的朋友。您只能从A
或A
访问B
的内部,因此我们将这样做:
class B {
int y = 2;
void set(const A& a) { y = a.x; }
};
现在,我们给B
的{{1}},它可以访问A
,所以现在我们只调用x
。在这里使用指针的事实没有什么区别,您只需要像往常一样取消对它们的引用即可。
答案 1 :(得分:0)
作为Tas答案的扩展,如果您希望使用=
运算符的语法糖,则可以在Class1中重载此运算符以执行与set
相同的操作。
Class1& operator=(const Class2& _other)
{
y = a.x;
return *this;
}
在这样使用它的地方:
int main() {
Class2 Object2;
Class1 Object1;
Object1 = Object2;
return 0;
}