Форум программистов, компьютерный форум CyberForum.ru

Вопросы по наследованию - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Наследник класса, переопределение функции http://www.cyberforum.ru/cpp-beginners/thread908741.html
Доброго времени суток! Есть не виртуальный класс, от него необходимо наследоваться и перегрузить одну из функций. Входные параметры будут такие же, как и у существующей, имя функции необходимо оставить тоже! Можно ли это вообще сделать, или придется какой-либо фиктивный входной параметр добавлять, либо вообще в корне менять имя функции?
C++ Разработать класс, набор методов для программной модели заданного объекта Разработать класс, набор методов (конструктор, деструктор и указаны методы) для программной модели заданного объекта. Описание объекта и его основных свойств приводится ниже. Привести программу (int main), использующая объекты разработанного класса: Объект «рациональный НЕ сократимых дробь, представлен парой целых чисел». Конструктор должен позволить создавать объекты без и с начальной... http://www.cyberforum.ru/cpp-beginners/thread908714.html
Не могу найти ошибку! C++
#include <graphics.h> #include<math.h> int xc=200,yc=200; int xe,ye; int mx=20; int my=20; int a=-7, b=7; int a1=4, b1=2;
C++ Двумерный массив - ошибка приведения типов
Приветсвую. Столкнулся с такой проблемой, точнее не с проблемой а с вопросом. допустим: имеется функция Function; void Function( double *(points)); Которая что-то делает. Приводить определение не имеет смысла. При вызове ее: int main(int argc, char **argv) { Function(points); } Компилятор естессно ругается : Error 1 error C2664: 'Function' : cannot convert parameter 1 from 'double ' to...
C++ Создание анаглифического изображения http://www.cyberforum.ru/cpp-beginners/thread908679.html
Доброго времени суток, я пытаюсь написать программу, которая клепает анаглифы из 2-х бмп. От левого изображения копируется красный цвет, от правого синий и зеленые. что-то идет не так, не могу разобраться. Код ниже. Изображение создается, красное ложится идеально, а вот с бирюзовым не все в порядке. #include<iostream> #include "Windows.h"; struct PIXEL { unsigned char b; ...
C++ Программа, считывающая файл построчно и выводящая на экран только строки, не содержащие двузначных чисел Нужно написать программу, которая считывает текст из файла и выводит на экран только те строки, не содержащие двузначных чисел. Оформить в виде функций законченные последовательности действий. Никак не могу разобраться, помогите пожалуйста :( Написала только часть с построчным считыванием :( #include<iostream> #include<conio.h> #include<fstream> #include<string> using namespace std; void... подробнее

Показать сообщение отдельно
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
20.06.2013, 14:38     Вопросы по наследованию
Цитата Сообщение от ValeryS Посмотреть сообщение
В чем заключается это проблема?
Прогблема ромба.
Ромбовидное наследование (англ. diamond inheritance) — ситуация в объектно-ориентированных языках программирования с поддержкой множественного наследования, когда два класса B и C наследуют от A, а класс D наследует от обоих классов B и C. При этой схеме наследования может возникнуть неоднозначность: если метод класса D вызывает метод, определенный в классе A (и этот метод не был переопределен), а классы B и C по-своему переопределили этот метод, то от какого класса его наследовать: B или C?

Например, в области разработки графических интерфейсов класс Button («Кнопка») может одновременно наследовать от класса Rectangle («Прямоугольник», для внешнего вида) и от класса Clickable («Доступен для кликанья мышкой», для реализации функционала/обработки ввода), а Rectangle и Clickable наследуют от класса Object («Объект»). Если вызвать метод equals («Равно») для объекта Button, и в классе Button не окажется такого метода, но в классе Object будет присутствовать метод equals по-своему переопределенный как в классе Rectangle, так и в Clickable, то какой из методов должен быть вызван?

Проблема ромба (англ. diamond problem) получила свое название благодаря очертаниям диаграммы наследования классов в этой ситуации. В данной статье, класс A обозначается в виде вершины, классы B и C по отдельности указываются ниже, а D соединяется с обоими в самом низу, образуя ромб.
рис
Название: 180px-Diamond_inheritance.svg.png
Просмотров: 43

Размер: 5.0 Кб

C++ по умолчанию не создает ромбовидного наследования: компилятор обрабатывает каждый путь наследования отдельно, в результате чего объект D будет на самом деле содержать два разных подобъекта A, и при использовании членов A потребуется указать путь наследования (B::A или C::A). Чтобы сгенерировать ромбовидную структуру наследования, необходимо воспользоваться виртуальным наследованием класса A на нескольких путях наследования: если оба наследования от A к B и от A к C помечаются спецификатором virtual (например, class B : virtual public A), C++ специальным образом проследит за созданием только одного подобъекта A, и использование членов A будет работать корректно. Если виртуальное и невиртуальное наследования смешиваются, то получается один виртуальный подобъект A и по одному невиртуальному подобъекту A для каждого пути невиртуального наследования к A. При виртуальном вызове метода виртуального базового класса используется так называемое правило доминирования: компилятор запрещает виртуальный вызов метода, который был перегружен на нескольких путях наследования.
 
Текущее время: 19:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru