class A {
public:
void operator=(const B &in);
private:
int a;
};
class B {
private:
int c;
}
对不起。发生了一个错误。赋值运算符有效吗?或者有没有办法实现这一目标? [A和B级之间没有关系。]
void A::operator=(const B& in)
{
a = in.c;
}
非常感谢。
答案 0 :(得分:8)
是的,你可以这样做。
#include <iostream>
using namespace std;
class B {
public:
B() : y(1) {}
int getY() const { return y; }
private:
int y;
};
class A {
public:
A() : x(0) {}
void operator=(const B &in) {
x = in.getY();
}
void display() { cout << x << endl; }
private:
int x;
};
int main() {
A a;
B b;
a = b;
a.display();
}
答案 1 :(得分:1)
赋值运算符和参数化构造函数都可以包含任何类型的参数,并以任何想要初始化对象的方式使用这些参数的值。
答案 2 :(得分:1)
这不是一个答案,但是应该意识到赋值运算符的典型习惯是让它返回对象类型的引用(而不是void)并在结尾返回(* this)。这样,您可以链接分配,如a = b = c:
A& operator=(const A& other)
{
// manage any deep copy issues here
return *this;
}
答案 3 :(得分:0)
其他人已经对此有所了解,但我实际上会说出来。是的,您可以使用不同的类型,但请注意,除非您使用朋友,否则您的班级无法访问与运营商传递的类的私有成员。
含义A无法访问B :: c,因为它是私有的。