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

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

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, код здесь получит ошибку при компиляции.

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

Благодарю.

5

Решение

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

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) {}
14

Другие решения

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

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

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

0

По вопросам рекламы [email protected]