2016-09-17 7 views
-2

하나의 클래스 객체를 다른 클래스 객체에 C++로 할당하려고합니다.하나의 클래스 객체를 C++의 다른 클래스 객체에 할당

예 : 하나의 클래스 개와 다른 클래스의 고양이가있다. 각 인스턴스를 하나씩 만듭니다 (d1 & c1). STL을 사용하고 싶지는 않습니다. 이 코드를 내 코드에서 사용하고 싶습니다.

d1 = c1;

프로그램

class dog 
{ 
    char dc; 
    float df; 
    int di; 
public: 
    void setdata2(char c, float f, int i) 
    { dc = c; df = f; di = i; } 
    void showdata2() 
    { cout <<"char =" << dc <<", float =" << df <<", int =" << di <<endl; } 
}; 


class cat 
{ 
    float cf; 
    int ci; 
    char cc;  
public: 
    void setdata(float f, int i, char c) 
    { cf = f; ci = i; cc = c; } 
    void showdata() 
    { cout <<"float =" << cf <<", int =" << ci <<", char =" << cc <<endl; } 
}; 


int main() 
{ 
    dog d1, d2; 
    cat c1, c2; 

    d1.setdata2('A', 56.78, 30); 
    c1.setdata(12.34, 2, 3); 
    d1.showdata2(); 
    c1.showdata(); 

    d2 = c1;  // Question 1 

    dog d3(c1);  // Question 2 

    dog d4 = c1; // Question 3 

    return 0; 
} 

질문 1/2/3별도로에 답변 해주세요.

답변

1

연산자 오버로딩에 대해 읽을 수 있습니다.

AB-implicitly convertible 경우 형 B의 개체 유형 A의 객체를 할당 할 수 있고, Bassignable 인 - BA 이물질 받아들이 overloaded 할당 연산자가있는 경우 나.

사용자 정의 유형 A에서 관련없는 유형 B으로의 변환을 정의하는 두 가지 방법이 있습니다. Aconversion function을 정의하거나 B 유형으로 converting constructor을 정의 할 수 있습니다.

1) 사본 할당입니다. 위의 설명이 적용됩니다. cat::operator dog() 또는 dog::dog(cat) 또는 dog::operator=(cat)을 정의하십시오.

2) 이것은 direct initialization입니다. 그것은 당신이 요구 한 과제가 아닙니다. 암시 적 변환을 정의하면이 작업도 가능하지만 오버로드 된 대입 연산자는 그렇지 않습니다. 그러나 오버로드 된 생성자는 대체 제 3의 대안이 될 수 있습니다.

3) 구문 상으로 할당과 조금 비슷해 보이지만 실제로는 copy initialization입니다. 2)와 동일한 규칙이 적용됩니다.


추신. 두 변수를 d3이라는 이름으로 정의한다는 점에 유의하십시오. 그것은 오류입니다.

+0

제 1 회 대답의 정의를 컴파일러에서 순서대로 검색 할 수 있습니까? – Lavnesh

+0

작동하지 않습니다[email protected] user2079303 [코드 링크] (https://gist.github.com/anonymous/90d6928fdfdbc6287ee0e91b85dc94f2) – Lavnesh

2

"=" 연산자를 오버로드 할 때까지 서로 관련이없는 서로 다른 클래스의 두 객체를 할당 할 수 없습니다.

당신은 내가 C++에서 다른 클래스 객체에 하나 개의 클래스 객체를 할당 할 here