将一个类对象分配给C++中的另一个类对象
问题描述:
我想将一个类对象分配给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每个分别。
答
我想用C一类对象分配给另一个类对象++。
是可能的A
类型的对象分配给B
类型的对象如果A
是implicitly convertible到B
,和B
是assignable - 或者,如果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
定义两个变量。这是一个错误。
你能告诉我在第一个答案中编译器在哪个顺序中搜索定义。 – Lavnesh
它不工作。@ user2079303 [Code Link](https://gist.github.com/anonymous/90d6928fdfdbc6287ee0e91b85dc94f2) – Lavnesh