在 C++ 中将一个 class 对象分配给另一个 class 对象
assign one class object to another class object in c++
我想在 c++ 中将一个 class 对象分配给另一个 class 对象。
例如:
有一只 class 狗和另一只 class 猫。为每个 (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 .
您不能将两个不同 类 的对象分配给彼此不相关的对象,除非您为它们重载 "="
运算符。
You can read about operator overloading here
I want to assign one class object to another class object in c++.
如果 A
是 implicitly convertible to B
, and B
is assignable - or, if B
has an overloaded 接受类型 A
.
有两种方法可以定义从自定义类型 A
到不相关类型 B
的转换。您可以为类型 B
.
定义 conversion function for A
, or you can define a converting constructor
1) 这是复制赋值。以上解释适用。定义 cat::operator dog()
或 dog::dog(cat)
或 dog::operator=(cat)
.
2) 这是direct initialization。这不是您所要求的作业。定义隐式转换也适用于此,但重载的赋值运算符不会。但是,重载的构造函数将是替代的第三种选择。
3) 尽管这在语法上看起来有点像赋值,但实际上是 copy initialization。适用与 2).
相同的规则
PS。请注意,您通过名称 d3
定义了两个变量。那是一个错误。
我想在 c++ 中将一个 class 对象分配给另一个 class 对象。
例如: 有一只 class 狗和另一只 class 猫。为每个 (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 .
您不能将两个不同 类 的对象分配给彼此不相关的对象,除非您为它们重载 "="
运算符。
You can read about operator overloading here
I want to assign one class object to another class object in c++.
如果 A
是 implicitly convertible to B
, and B
is assignable - or, if B
has an overloaded 接受类型 A
.
有两种方法可以定义从自定义类型 A
到不相关类型 B
的转换。您可以为类型 B
.
A
, or you can define a converting constructor
1) 这是复制赋值。以上解释适用。定义 cat::operator dog()
或 dog::dog(cat)
或 dog::operator=(cat)
.
2) 这是direct initialization。这不是您所要求的作业。定义隐式转换也适用于此,但重载的赋值运算符不会。但是,重载的构造函数将是替代的第三种选择。
3) 尽管这在语法上看起来有点像赋值,但实际上是 copy initialization。适用与 2).
相同的规则PS。请注意,您通过名称 d3
定义了两个变量。那是一个错误。