Возможно, недопустимо перенаправлять все в оператор присваивания, но это было обычным в C ++ 03, где это было разрешено.
В C ++ 11 конструкторы проще: перенаправьте все конструкторы в один главный конструктор.
class Foo {
private:
int a,b;
public:
Foo(int c, int d) : a(c), b(d) {}
Foo(const Foo & X) : Foo(x.a, x.d) {}
//syntax may be wrong, I don't have a C++11 compiler
Foo& operator=(const Foo& X) {
if (this == &X) return *this;
a = X.a;
b = X.b;
return *this;
}
}
В C ++ 03 (где это разрешено)
class Foo {
private:
int a,b;
void init(int c, int d) {a=c; b=d;}
public:
Foo(int c, int d) : {init(c,d);}
Foo(const Foo & X) : {init(X.a, X.b);}
Foo& operator=(const Foo& X) { init(X.a, X.b);}
}
Но имейте в виду, что это не может использоваться в некоторых распространенных случаях. (любой объект, который не может быть назначен)