我想在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 。
答案 0 :(得分:2)
在重载"="
运算符之前,不能将彼此不相关的两个不同类的对象分配给彼此。
您可以阅读有关运算符重载here
的信息
答案 1 :(得分:1)
我想在c ++中将一个类对象分配给另一个类对象。
如果A
为implicitly convertible到B
,A
可以将类型为B
的对象分配给类型B
的对象,{{1如果B
有一个assignable赋值运算符,它接受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
定义两个变量。这是一个错误。