前言:
如果你在 Java 中编写,
A a1 = new A();
A a2 = a1;
然后a1
和a2
指的是同一个对象。
但在 C++ 中,情况略有不同。您可能不需要new A()
总是创建一个对象。
假设您创建一个自动对象,如下所示:
A a1; // a1 is created on stack
A a2 = a1; // a2 is created on stack and copied from a1
请注意a1
和a2
是具有相同值的不同对象。他们不是指同一个实体。如果你想a2
成为参考,a1
那么写如下:
A &a2 = a1;
如果您想模拟原始 Java 行为,那么指针很有用:
A *a1 = new A();
A *a2 = a1;
回答:
至此,您将了解上面的 C++ 对象和引用之间的区别。
话虽如此,C++ 有更好的方法来设置对象而不是使用setA()
. 你可以简单地重载operator =
class A : public B
{
int member; // some member variable
public:
A& operator = (const A &a) // don't need to use `B&`
{
*(static_cast<B*>(this)) = a; // this calls `B::operator =`
this->member = a.member; // copy other members likewise
return *this;
}
};
用法:
A a1, a2;
a1 = a2; // calls B::operator = and A::operator =
另请注意,您可能并不总是需要operator =
在类内部进行定义。当您真正需要它时,有一些特殊情况。默认情况下,编译器会生成一个复制构造函数和赋值运算符并为您执行复制。