BlinCTJune 14, 2020, 4:27 p.m.
Ограничение наследования метода из базового класса
Всем привет.
Возникла необходимость ограничить наследование метода. Есть 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(); }
Буду признателен если кто подскажет как это можно сделать.
Спасибо
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
l
- laei
- April 23, 2024, 9:19 p.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:10points,
- Rating points-10
Last comments
Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий КононенкоFeb. 5, 2024, 2:50 p.m.
EVADec. 25, 2023, 11:30 p.m.
Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Now discuss on the forum
DA
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
Dr Gangil AcademicsApril 20, 2024, 7:45 p.m.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел ДорофеевApril 14, 2024, 2:35 p.m.
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
Может есть какой то вариант через интерфейс или через патерн какой нибудь?
Если я правильно понял проблему то надо сделать так:
и в конструкторе cl3 выполнить
Хотя метод и так будет вызываться из базового класса.
Да и cl3 реализуется как
Вот как раз виртуальнео наследование тут не вариант.
После этого он создает проблему с приведением указателья базового класса. И как раз мне и нужно избавится от виртуального наследования.
В конструкторе виртуальные методы не стоит вызывать. На момент создания объекта не до конца сформирована привязка методов в таблице вирутальных методов. В итоге или не работает или черти что происходит. Для вызова виртуальных необходимо писать какой-нибудь initialize метод, и вызывать его после создания объекта.