В простейшем случае все выглядит достаточно просто:
class Foo : public Bar
{
public:
void NewMember();
}
Однако в таком случае унаследованы все публичные методы, но не конструкторы Bar (разве что кроме конструктора по умолчанию). Вручную "наследовать" все конструкторы может быть довольно утомительно, поможет парочка шаблонных конструкторов:
class Foo : public Bar
{
public:
Foo() : Bar() {}
template <typename T> Foo(T t) : Bar(t) {}
template <typename T1, typename T2> Foo(T1 t1, T2 t2) : Bar(t1, t2) {}
...
void NewMember();
}
5 комментариев:
Видимо всетаки так:
class Bar : public Foo
{
public:
Bar() : Foo() {}
// и далее тоже
...
}
конечно!
можно и макросик тогда сбацать, чтобы каждый раз не писать, имхо тут в самый раз.
что-то типа DEFINE_FORWARDING_CTORS(Derived, Base)
AnToXa: да, точно. Насколько уж я не люблю макросы препроцессора - но тут как раз отличная возможность их заиспользовать.
да уж кто их любит :)
Отправить комментарий