赋值运算符是否适用于不同类型的对象?

时间:2009-04-08 08:10:34

标签: c++ operator-overloading virtual-functions

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;

} 

非常感谢。

4 个答案:

答案 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,因为它是私有的。