LINUX.ORG.RU

Проблема с наследованием в C++


0

0

class base
{
protected:
base () {}
~base () {}
void method ( void ) {}
};

class derived : private base
{
public:
derived () : base () {}
~derived () {}
// using base::method; // это работает не такое возможно не для всех операторов :(
};

Как сделать чтобы пользователь класса derived мог вызывать метод base::method () ?

anonymous

А так не пробовал?
class derived : public base

Dead ★★★★
()

2Dead (*) (2003-09-29 18:50:49.559279)

ну во первых метод останется в protected, а во вторых мне нужно private наследование.

anonymous
()

Может я не правильно понял условие задачи но такое прекрасно работает

class base
{
protected:
base() {};
~base() {};

void method(void) {} ;
};

class derived : private base
{
public:
derived() : base () {} ;
~derived() {};
void func() {method();};
// using base::method; // это работает не такое возможно не для всех операт
};

Dead ★★★★
()

Да работает, но я protected функций в базовом классе много и писать для них wrapper'ы не хочу.

anonymous
()

Так а как же ты еще хотел вызывать protected функции после наследования?

Dead ★★★★
()

p.s. этож вроде как базывые понятия C++

Dead ★★★★
()

Dead (*) (2003-09-29 19:32:18.026339)

ну например через using это можно сделать, но using не получается применить к operator Type ();

так что если ты раскоментаришь строчку с using ты сможешь вызывать метод void method ( void ) из базового класса.

anonymous
()
Ответ на: комментарий от anonymous

ну например через using это можно сделать, но using не получается применить к operator Type ();

это вообще глупость по-моему (пытаться унаследовать операторы преобразования) ибо новый класс и преобразовываться должен как-то по-другому (аналогия с конструкторами/копированием)

так что по-моему все логично, мемберы наследуются, а специфичные вещи как-то конструкторы,операторы преобразования итд надо писать)

возможно глобально что-то не так... хочешь странного вобщем

HTH

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.