首页 > 解决方案 > 对 C++ 中的复制构造函数和对象感到困惑

问题描述

我在 Stack Overflow 上看到了其他问题,但他们只回答了一部分。
假设我们有一堂课——

class student
{
public:    
    string name;    
    student(string a)
    {
        name = a;
        cout << "parmeteised const." << endl;
    }

    student(student &a)
    {
        name = a.name;
        cout << "Copy const." << endl;
    }
};

int main()
{
    student a("Vyom");
    student c(a);
    if (a == c)
    {
        cout << "same";
    }
    return 0;
}

这不会编译并给出错误-

no operator "==" matches these operands -- operand types are: student == student

现在我知道这是错误的,我必须重载操作员才能这样做。

我的疑惑:

  1. 我们&a在复制构造函数中有参数,但我们只a在创建对象时输入c
  2. 如果第 1 点为真且有效,那么它可能意味着a代表对象的内存位置。
  3. 如果第 2 点是正确且有效的,那么为什么我不能比较a和的内存位置c
    (我知道内存位置将是十六进制但必须有一种方法将它们转换为 int 然后比较)。
    我是初学者,请帮助我澄清我的疑问。

标签: c++classpointersconstructor

解决方案


  1. 我们在复制构造函数中有参数&a,但我们只输入了一段时间来创建一个对象c。

在函数student(student &a)变量中,'a' 是对学生的引用。它不是指针 ( student* a)。

==如果要比较两个student对象 ,则必须实现比较运算符: operator_comparison


推荐阅读