Ограничение наследования метода из базового класса
Всем привет.
Возникла необходимость ограничить наследование метода. Есть 3 класса и есть базовый.
В базовом есть метод, его видят все наследники. Но нужно сделать так чтобы 2 наследника его видели а третий не видел его.
// базовый class clBase { public: explicit clBase(int i); protected: int getInt() const; protected: virtual void foo(); }; // первый и вторйо наследники используют метод getInt() #include "clBase.hpp" class cl1 : private clBase { public: explicit cl1(); }; //реализация первого #include "cl1.hpp" cl1::cl1() : clBase(1) { getInt(); } #include "clBase.hpp" class cl2 : private clBase { public: explicit cl2(); }; //реализация второго #include "cl2.hpp" cl2::cl2() : clBase(3) { getInt(); } // третий наследует первый и второй классы #include "cl1.hpp" #include "cl2.hpp" class cl3 : public cl1, public cl2, public clBase { public: explicit cl3(); }; //реализация, вот тут возникает конфликт, через кого класс видит метод //надо сделать так чтобы он его видел сразу из базового, но не через другие два #include "cl3.hpp" cl3::cl3() : cl2() , cl1() { getInt(); }
Буду признателен если кто подскажет как это можно сделать.
Спасибо
3
94
Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
- Соңғы пікірлер
- ИМҚар. 22, 2024, 9:51 Т.Қ.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
- ИМҚаз. 5, 2024, 4:51 Т.Қ.Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
- Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
- Енді форумда талқылаңыз
- fАқп. 15, 2025, 1:46 Т.Қ.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
- Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Может есть какой то вариант через интерфейс или через патерн какой нибудь?
Если я правильно понял проблему то надо сделать так:
и в конструкторе cl3 выполнить
Хотя метод и так будет вызываться из базового класса.
Да и cl3 реализуется как
Вот как раз виртуальнео наследование тут не вариант.
После этого он создает проблему с приведением указателья базового класса. И как раз мне и нужно избавится от виртуального наследования.
В конструкторе виртуальные методы не стоит вызывать. На момент создания объекта не до конца сформирована привязка методов в таблице вирутальных методов. В итоге или не работает или черти что происходит. Для вызова виртуальных необходимо писать какой-нибудь initialize метод, и вызывать его после создания объекта.