c++ - 在 C++ 中将一个类对象分配给另一个类对象

标签 c++ copy-constructor assignment-operator

我想在 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 类型的对象如果Aimplicitly convertibleB , 和 Bassignable - 或者,如果 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/

相关文章:

c++ - 为什么 "subsets.push_back(n);"行在以下代码中给我一个错误?

c++ - 如果没有显式复制构造函数,是否可以禁止赋值? C++

c++ - 工厂只需要声明 copy ctor 而无需实现

c++ - s 拷贝构造函数

java - 重载 C++ 赋值运算符使其表现得像 Java

r - R中的 `=`和 `<-`有什么区别?

c++ - 在可移动和不可复制的类上使用移动和交换习语是否有意义

c++ - 是否有元正则表达式语言或类?

C++如何使用默认参数指定模板类的所有 friend ?

c++ - gcc 优化标志中断代码