работает оператор присваивания с различными типами объектов? - PullRequest
4 голосов
/ 08 апреля 2009
class A {
public:
void operator=(const B &in);
private:
 int a;
};

class B {
private:
 int c;

}

извините. произошла ошибка. действителен ли оператор присваивания? или есть ли способ добиться этого? [Между классами А и В нет никакой связи.]

void A::operator=(const B& in) 
{ 
a = in.c;

} 

Большое спасибо.

Ответы [ 4 ]

8 голосов
/ 08 апреля 2009

Да, вы можете сделать это.

#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 голос
/ 21 ноября 2012

Это не ответ, но следует помнить, что типичная идиома для оператора присваивания - заставить его вернуть ссылку на тип объекта (а не void) и вернуть (* this) в конце. Таким образом, вы можете связать присвоение, как в a = b = c:

A& operator=(const A& other) 
{
    // manage any deep copy issues here
    return *this;
}
1 голос
/ 08 апреля 2009

Как оператор присваивания, так и параметризованные конструкторы могут иметь параметры любого типа и использовать значения этих параметров любым способом, которым они хотят инициализировать объект.

0 голосов
/ 13 мая 2011

Другие прояснили это, но я на самом деле скажу это. Да, вы можете использовать разные типы, но учтите, что если вы не используете друга, ваш класс не сможет получить доступ к закрытым членам класса, который передается с оператором.

То есть A не сможет получить доступ к B :: c, потому что это личное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...