【发布时间】:2021-06-12 11:56:51
【问题描述】:
我在 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,但我们在创建对象c时只输入a。 - 如果第 1 点为真且有效,则可能意味着
a代表对象的内存位置。 - 如果第 2 点为真且有效,那么为什么我不能比较
a和c的内存位置
(我知道内存位置将是十六进制但必须有一种方法可以转换将它们转换为 int 然后进行比较)。
我是初学者,请帮助我澄清我的疑问。
【问题讨论】:
-
您是正确的,没有对象 a 从主框架复制到构造框架,因为您使用的是引用。但这并不意味着“a 代表对象的内存位置”。这是因为当 C++ 通过引用获取参数时,在底层,它会查找该对象的内存地址,但作为程序员的您在任何时候都不需要传递该指针。
标签: c++ class pointers constructor