在 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++.

如果 Aimplicitly 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 定义了两个变量。那是一个错误。