我想在 C++ 中将一个类对象分配给另一个类对象。
Ex:有一个类别为“狗”,另一个类别为“猫”。为每个 (d1 & c1) 创建一个实例。不想使用任何STL。我想在我的代码中使用这个语句
d1 = c1;
Program
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 each 分别地.
我想在 C++ 中将一个类对象分配给另一个类对象。
可以分配类型的对象A
到一个类型的对象B
if A
is 隐式可转换 http://en.cppreference.com/w/cpp/language/implicit_conversion to B
, and B
is 可分配的 http://en.cppreference.com/w/cpp/concept/CopyAssignable- 或者如果B
has an 超载 http://en.cppreference.com/w/cpp/language/operators接受类型对象的赋值运算符A
.
有两种方法可以定义自定义类型的转换A
到不相关的类型B
。您可以定义一个转换函数 http://en.cppreference.com/w/cpp/language/cast_operator for A
,或者你可以定义一个转换构造函数 http://en.cppreference.com/w/cpp/language/converting_constructor对于类型B
.
1)这是复制作业。上述解释适用。要么定义cat::operator dog()
or dog::dog(cat)
or dog::operator=(cat)
.
2)这是直接初始化 http://en.cppreference.com/w/cpp/language/direct_initialization。这不是您所问的任务。定义隐式转换也适用于这种情况,但重载的赋值运算符则不行。然而,重载构造函数将是替代的第三种选择。
3)尽管这在语法上看起来有点像赋值,但这实际上是复制初始化 http://en.cppreference.com/w/cpp/language/copy_initialization。适用与 2) 相同的规则。
附言。请注意,您正在按名称定义两个变量d3
。这是一个错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)