C++ 理解复制构造函数和复制赋值运算符

C++ 理解复制构造函数和复制赋值运算符,c++,copy-constructor,copy-assignment,C++,Copy Constructor,Copy Assignment,根据我的说法,在案例1中使用了复制分配运算符,因此输出应该是0 68,但它是0 87,在案例2中是87,这很好 #include <iostream> using namespace std; class numbered { static int un; public: int a; numbered (): a(un) {un++;} numbered(const numbered & n) : a(87){} numbered & opera

根据我的说法,在案例1中使用了复制分配运算符,因此输出应该是
0 68
,但它是
0 87
,在案例2中是
87
,这很好

#include <iostream>
using namespace std;
class numbered
{
  static int un;
public:
  int a;
  numbered (): a(un) {un++;}
  numbered(const numbered & n) : a(87){}
  numbered & operator=(const numbered) { a=68; return *this; }
};

int numbered::un=0;

void f(numbered  s){ cout<<s.a;}

int main()
{
  numbered a, b=a;
  cout << a.a << b.a;   //case 1
  f(a);f(b);        //case 2
  return 0;
}
#包括
使用名称空间std;
班级编号
{
静态整数;
公众:
INTA;
编号():a(un){un++;}
编号(常数编号&n):a(87){}
编号的&operator=(常量编号){a=68;返回*this;}
};
int编号::un=0;
空f(编号s){cout

也可以这样写:

numbered a, b(a);

这是一行中多个对象的定义。
b
在此构造,因此称之为复制任务。

它工作正常

要获得预期结果,请执行以下操作:

numbered a, b;
b = a;

此代码乱七八糟。请将其缩进得更好,同时注意您正在声明的
public
private
@nicolamasatti,您的编辑掩盖了OP在理解其代码时遇到的原始问题。您弄错了问题。
numbered a, b;
b = a;