Инициализация члена класса с экземпляром

мой вопрос заключается в следующем: предположим, у меня есть:

class Foo
{
public:
Foo() {}
void setInt(int i) { myInt = i; }
int getInt() { return myInt; }
private:
int myInt;
};

class Bar
{
public:
Bar(Foo f) { /* do something with f.getInt() */ }
};

Теперь у меня есть другой класс, в котором в качестве члена можно использовать Bar:

class BarUser
{
public:
BarUser();
private:
Bar bar;
};

Я хочу написать конструктор BarUser, однако я хочу инициализировать Bar с членом Foo, у которого целое число равно 3. т.е .:

Foo f;
f.setInt(3);
Bar b(f);

Однако, так как у меня в качестве участника класса Bar, я не могу написать весь этот код в списке инициализации … Я имею в виду следующее:

BarUser::BarUser() : bar(/* Foo after executing f.setInt(3) */)
{ ... }

Предположим, что оператор присваивания недопустим для Bar — как я могу инициализировать его, как предполагалось?

Спасибо!

1

Решение

Если вы не можете изменить Fooнапишите функцию:

Foo make_foo(int i) {
Foo f;
f.setInt(i);
return f;
}

затем инициализировать с bar(make_foo(3)),

Ты как бы выстрелил себе в ногу, дав Foo конструктор, но нет int конструктор. Возможно, вам лучше добавить explicit конструктор для Foo это занимает int,

0

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

Других решений пока нет …

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