У меня есть некий абстрактный класс, назовем его Abstr
. У него есть чисто виртуальная функция, что выводит на экран принятый указатель (разыменовывает и выводит). Т.е., имеем следующее:
class Abstr
{
...
public:
...
virtual void show(int *) const = 0;
...
};
От него наследуются два класса: Test1
и Test2
. Они переопределяют его метод show:
class Test1 : public Abstr
{
...
public:
...
void show(int *) const override { ... }
...
};
class Test2 : public Abstr
{
...
public:
...
void show(int *) const override { ... }
...
};
Также есть третий класс - Test3
. Он инкапсулирует указатель на тип int
. Тут не буду описывать все конструкторы и перегрузки операторов этого класса.
class Test3
{
private:
int * ptr;
public:
void show() const { ... }
...
};
Он тоже имеет свою функцию show
- она выводит на экран разыменованный указатель ptr
.
Итак, классы Test1
, Test2
и Test3
похожи - они работают с указателями. Вот только первые два в методе show принимают указатель для вывода, а Test3
выводит инкапсулированный указатель.
Вопрос.
Надеюсь, общую картину вы поняли. Теперь сам вопрос.
Я наследую класс Test3
от класса Abstr
. Но метод show
в абстрактном классе принимает указатель, а его перегрузке в Test3
принимать указатель не нужно, поскольку внутри класса есть поле-указатель ptr
, что и должен выводиться в этом методе.
Т.е., я хочу наследоваться от класса Abstr
и переопределить его чисто виртуальную функцию show
так, чтобы она не принимала параметр. Как мне это сделать?
Мои размышления на этот счет:
От класса Abstr
можно наследоваться только в классах Test1
и Test2
, а об идее наследования классом Test3
забыть.
Но все же я думаю, что наследование классом Test3
от класса Abstr
сделало бы мой код красивее и понятнее.
Думаю, что понятно изложил вопрос. Буду очень благодарен любой помощи!
А как вы себе представляете наследование? Что компилятор должен делать, если вы напишете такой код.
Abstr* test = new Test3(param);
test->show(my_ptr);
Метод show(int *)
должен быть у Test3 обязательно. Если это не противоречит логике класса, можно оставить оба метода, и show(int *)
и show()
, но, в таком случае, show()
вы сможете вызвать только при явном приведение типа.
Если противоречит, то можно show(int*) в Test3
заасертить или выбрасывать исключение, но это совсем не хорошая практика. Разбираться в коде, где некоторые методы объявлены но не реализованы тяжело.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня есть 6 штук блоков, каждые называются одинаково, только значения в теге <b>12</b> разные
Цель состоит в том, чтобы визуализировать элементы HTML в перспективе, как в примерах ниже
Как изменить стили только у li с надписью Категория 1 ур
нужно реализовать загрузку фотографий через текстовый инпут, те пользователь вставляет ссылку на картинку в инпут, нажимает добавить и и у него...