簡體   English   中英

在c ++中將一個類對象分配給另一個類對象

[英]assign one class object to another class object in 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。

在重載"="運算符之前,不能將彼此不相關的兩個不同類的對象分配給彼此。

您可以在此處閱讀有關運算符重載的信息

我想在c ++中將一個類對象分配給另一個類對象。

是可能的類型的對象分配A給類型的對象B如果A隱式轉換B ,和B可分配的 -或者,如果B具有重載接受類型的對象賦值操作符A

有兩種方法可以定義從自定義類型A到無關類型B 您可以為A定義轉換函數 ,也可以為類型B定義轉換構造函數

1)這是復制作業。 以上說明適用。 定義cat::operator dog()dog::dog(cat)dog::operator=(cat)

2)這是直接初始化 這不是你所詢問的任務。 定義隱式轉換也適用於此,但重載賦值運算符不會。 但是,重載的構造函數將是替代的第三種替代方法。

3)即使這看起來有點像語法分配,這實際上是復制初始化 同樣的規則適用於2)。


PS。 請注意,您要使用名稱d3定義兩個變量。 那是一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM