2016-09-17 128 views
-2

我想將一個類對象分配給C++中的另一個類對象。將一個類對象分配給C++中的另一個類對象

例: 有一個Dog類和其他類貓。創建每個實例(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

我想用C一類對象分配給另一個類對象++。

是可能的A類型的對象分配給B類型的對象如果Aimplicitly convertibleB,和Bassignable - 或者,如果B具有接受A類型的對象的overloaded賦值運算符。

有兩種方法可以定義從自定義類型A到無關類型B的轉換。您可以爲A定義conversion function,或者可以爲B定義converting constructor

1)這是複印任務。以上說明適用。定義爲cat::operator dog()dog::dog(cat)dog::operator=(cat)

2)這是direct initialization。這不是你問到的任務。定義隱式轉換也適用於此,但重載的賦值運算符不會。但是,重載的構造函數將是替代的第三種選擇。

3)儘管這看起來有點像語法上的賦值,但實際上這是copy initialization。與2)相同的規則適用。


PS。請注意,您正在通過名稱d3定義兩個變量。這是一個錯誤。

+0

你能告訴我在第一個答案中編譯器在哪個順序中搜索定義。 – Lavnesh

+0

它不工作。@ user2079303 [Code Link](https://gist.github.com/anonymous/90d6928fdfdbc6287ee0e91b85dc94f2) – Lavnesh

2

除非您爲它們重載"="運算符,否則不能將彼此不相關的不同類的兩個對象分配給彼此。

你可以閱讀有關運算符重載here

相關問題