мой вопрос заключается в следующем: предположим, у меня есть:
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 — как я могу инициализировать его, как предполагалось?
Спасибо!
Если вы не можете изменить Foo
напишите функцию:
Foo make_foo(int i) {
Foo f;
f.setInt(i);
return f;
}
затем инициализировать с bar(make_foo(3))
,
Ты как бы выстрелил себе в ногу, дав Foo
конструктор, но нет int
конструктор. Возможно, вам лучше добавить explicit
конструктор для Foo
это занимает int
,
Других решений пока нет …