Значение аргумента по умолчанию основано на других

Я хочу получить такой класс:

class A{
    int a;
    int b;
    int c;
    A():a(),b(),c(){};
    A(int ia,int ib,int ic=ia+ib):a(ia),b(ib),c(ic){};  //this is what i need
};

Я хочу, чтобы значение ic по умолчанию было рассчитано на основе ia и ib, код здесь получит ошибку при компиляции.

Интересно, есть ли способ получить что-то подобное?

Благодарю.

2 ответа

Решение

Просто добавьте еще одну перегрузку конструктора:

A(int ia, int ib)
  : a(ia), b(ib), c(ia + ib) {}

A(int ia, int ib, int ic)
  : a(ia), b(ib), c(ic) {}

Для более сложной инициализации вы можете избежать повторения, используя делегирующий конструктор C++11:

A(int ia, int ib)
  : A(ia, ib, ia + ib) {}

A(int ia, int ib, int ic)
  : a(ia), b(ib), c(ic) {}

Вы можете просто создать конструктор по умолчанию с необходимыми значениями или просто перегрузить, добавив другой конструктор. Значения будут назначены после того, как вы их выполнили.

A (int ia, int ib, int ic): a(ia), b(ib), c(ic) {}

Прочтите эту ссылку, если вам нужна дополнительная помощь в настройке конструктора по умолчанию.

Другие вопросы по тегам