我想在 C++ 中将一个类对象分配给另一个类对象。
例如: 有一个类 Dog 和另一个类 Cat。为每个 (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 分别回答。
最佳答案
I want to assign one class object to another class object in c++.
可以分配类型为 A
的对象到 B
类型的对象如果A
是implicitly convertible至 B
, 和 B
是assignable - 或者,如果 B
有一个 overloaded接受类型对象的赋值运算符 A
.
有两种方法可以定义自定义类型的转换 A
到不相关的类型 B
.您可以定义 conversion function对于 A
,或者您可以定义一个 converting constructor对于类型 B
.
1) 这是复制分配。以上解释适用。要么定义 cat::operator dog()
或 dog::dog(cat)
或 dog::operator=(cat)
.
2) 这是 direct initialization .这不是您所要求的作业。定义隐式转换也适用于此,但重载的赋值运算符不会。但是,重载的构造函数将是替代的第三种选择。
3) 尽管这在语法上看起来有点像赋值,但实际上是 copy initialization .与 2) 相同的规则适用。
附言。请注意,您通过名称 d3
定义了两个变量。 .这是一个错误。
关于c++ - 在 C++ 中将一个类对象分配给另一个类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39548639/