2009-04-08 5 views
4
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

이 태그에는 C++ – MahlerFive

+0

이라는 태그가 있어야합니다. 오류가 발생했습니다. 은 할당 연산자가 유효합니까? 또는이를 수행 할 수있는 방법이 있습니까? [A와 B 클래스 간에는 아무런 관계가 없습니다.] void A :: operator = (const B & in) { a = in.c; } 감사합니다. –

+0

태그가 수정되었습니다. – mouviciel

답변

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(); 
} 
+0

또한 getY()를 const 멤버 함수로 만들고 const_cast를 피할 수 있습니다. – Naveen

+0

예, getY const를 만들고 constness를 버리지 마십시오. –

+0

참 ... 되돌아 가서 변경하는 게 게으 름이었습니다 :) – Shree

1

할당 연산자와 매개 변수화 된 생성자는 모든 유형의 매개 변수를 가질 수 있으며 이러한 매개 변수의 값을 개체를 초기화하는 방식으로 사용할 수 있습니다.

0

다른 사람들은이 문제에 관해 언급했지만 실제로 알려 드릴 것입니다. 네, 다른 유형을 사용할 수는 있지만, 친구를 사용하지 않으면 클래스가 운영자에게 전달되는 클래스의 비공개 멤버에 액세스 할 수 없다는 점에 유의하십시오.

의미 A는 비공개이므로 B :: c에 액세스 할 수 없습니다.

1

이것은 대답이 아니지만 대입 연산자의 일반적인 관용구는 객체 유형에 대한 참조 (void가 아닌)를 반환하고 끝에 (* this)를 반환한다는 점에 유의해야합니다 . 이렇게하면 a = b = c와 같이 지정자를 연결할 수 있습니다.

A& operator=(const A& other) 
{ 
    // manage any deep copy issues here 
    return *this; 
} 
관련 문제