[英]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.