Как создать один объект с двумя или более инициализацией конструктора одновременно - PullRequest
1 голос
/ 25 октября 2019

Как мы можем создать один объект с двумя или более инициализацией конструктора одновременно, не изменяя все конструкторы перегрузки и другие существующие коды? (Или, если не совсем, как можно меньше изменений)

class valuation {
public:
    valuation(const int s) : pos(s) {};
    valuation(int a,int b,int c) : j(a),k(b),l(c) {};

private:    
    const int pos;
    int j,k,l;


main(){

  int a=1,b=2,c=3, v=7;

// how to set pos=7 j=1 k=2 l=3 once, below just illustration

  valuation O(v)      // ? 
  valuation O(a,b,c); // ?

Спасибо

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Вы не можете сделать это в C ++. Просто создайте конструктор с 4 параметрами или добавьте Setter в свой класс и установите значения.

0 голосов
/ 25 октября 2019

C ++ не может представлять концепцию двухфазного построения на уровне языка. По указанию, если конструктор объекта завершается, то это живой объект. И это означает, что все его подобъекты уже созданы (и либо инициализированы, либо оставлены неинициализированными). Вы можете создать новый объект в его хранилище, но это перезапишет старый, что приведет к окончанию срока его службы.

У вас может быть конструктор, откладывающий основную конструкцию до другого конструктора. Но при этом другой конструктор будет правильно конструировать объект. И даже тогда это деталь реализации;это не то, что появляется в интерфейсе объекта.

Вы можете инициализировать часть const вашего объекта в конструкторе и иметь функцию для инициализации других подобъектов. Но что касается языка, это не будет отличаться от любого другого вызова функции, который манипулирует членами объекта.

...