c++ - 对 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
现在我知道这是错误的,我必须重载操作员才能这样做。
我的疑惑:
- 我们
&a
在复制构造函数中有参数,但我们只a
在创建对象时输入c
。 - 如果第 1 点为真且有效,那么它可能意味着
a
代表对象的内存位置。 - 如果第 2 点是正确且有效的,那么为什么我不能比较
a
和的内存位置c
(我知道内存位置将是十六进制但必须有一种方法将它们转换为 int 然后比较)。
我是初学者,请帮助我澄清我的疑问。
解决方案
- 我们在复制构造函数中有参数&a,但我们只输入了一段时间来创建一个对象c。
在函数student(student &a)
变量中,'a' 是对学生的引用。它不是指针 ( student* a
)。
==
如果要比较两个student
对象
,则必须实现比较运算符: operator_comparison
推荐阅读
- php - PHP | 未在数据库中加载 CSV 数据
- html - HTML的value属性如何标签工作?
- firebase - Firebase 翻译文本扩展 - 是否可以翻译嵌套集合中的字段?
- java - 我在没有“catch”、“finally”或资源声明的情况下遇到错误,我该如何在下面的代码中解决这个问题
- rust - 是否可以仅使用“macro_rules!”来实现这个宏?
- random - 选择随机枚举值的简单且安全的方法是什么?
- arrays - 如何在C中返回指向结构数组的指针
- swift - 如何将结构数组转换为列表领域?
- javascript - 将项目添加到特定的列表数组 redux
- python - 将模型连接到边界框