C++ 复制构造函数和浅复制

C++ 复制构造函数和浅复制,c++,oop,copy-constructor,shallow-copy,C++,Oop,Copy Constructor,Shallow Copy,我编写了以下代码以查看浅拷贝。我希望v2是v1的一个浅拷贝,因为没有定义拷贝构造函数,所以我希望更改v1.n也会导致v2.n发生更改,但事实并非如此。我做错了什么 #include<iostream> using namespace std; class Vector { public: int n; float *v; Vector(); }; Vector::Vector() { v = new float[100]; n = 100; cout&

我编写了以下代码以查看浅拷贝。我希望v2是v1的一个浅拷贝,因为没有定义拷贝构造函数,所以我希望更改v1.n也会导致v2.n发生更改,但事实并非如此。我做错了什么

#include<iostream>
using namespace std;
class Vector
{
  public:
  int n;
  float *v;

  Vector();

};
Vector::Vector()
{
  v = new float[100];
  n = 100;
  cout<<"Constructor called"<<endl;
}


int main()
{
  Vector v1;
  v1.n=5;
  Vector v2=v1;
  v1.n=6;
  cout <<"Vector v1 has n value: "<<v1.n<<endl;
  cout <<"Vector v2 has n value: "<<v2.n<<endl;

  return 0;
}
#包括
使用名称空间std;
类向量
{
公众:
int n;
浮动*v;
向量();
};
向量::向量()
{
v=新浮点数[100];
n=100;

你没有做错什么,只是一个
int
的浅拷贝仍然是一个拷贝

v1
v2
有各自的
n
副本,更改一个副本不会更改另一个副本


如果希望看到预期的浅层复制行为,请使用指针
v
。如果希望浅层复制行为成为指针,则此副本仅复制指针,而不复制其指向的内存,即更改
v1.v
指向的一个值将更改
v2.v
指向的值。因此如果我给数组的元素赋值,我应该看到它们上的浅层复制行为,但不应该看到数据成员上的浅层复制行为,不涉及像int这样的指针?是的,这是正确的。编辑答案也是为了弄清楚这一点。