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

Неоднозначность при наследовании - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задача "Гигабашня": минимальное расстояние до этажа со счастливым номером http://www.cyberforum.ru/cpp-beginners/thread1307171.html
Гигабашня — самое высокое и глубокое здание в Киберленде. В ней 17 777 777 777 этажей, пронумерованных от  - 8 888 888 888 до 8 888 888 888. В частности, между этажами  - 1 и 1 есть этаж 0. Тысячи туристов ежедневно приходят сюда, чтобы насладиться чудесным видом. В Киберленде верят, что цифра «8» прносит удачу (именно поэтому в Гигабашне 8 888 888 888 этажей над землей), а целое число...
C++ Лог файл и аргументы командной строки Привет! Осваиваю С++ и нужна помощь, я хочу что бы в командной строке: ввел символ и поменялся след робота, но у меня получается так, что вводишь номер символа по ACSII таблице и только тогда идет смена отрисовки следа, а так не получается. Т.е вводишь номер 63 и идет отрисовка символом вопроса, а нужно просто символ ввести. И еще нужна помощь по логу маршрута робота, нужно получить смену... http://www.cyberforum.ru/cpp-beginners/thread1307155.html
Подскажите сайт, на котором куча задач по написанию программ C++
нужен сайт, на котором куча задач по написанию программ(на паскальке или c++... - не важно) раньше попадался такой, сейчас найти не могу...
С++ дерево представлено в памяти в виде бинарного дерева. Определить максимальное число потомков одного узла C++
дерево представлено в памяти в виде бинарного дерева. Определить максимальное число потомков одного узла в исходном дереве
C++ Как преобразовать int в char http://www.cyberforum.ru/cpp-beginners/thread1307130.html
Подскажите пожалуйста как преобразовать int в char Есть код к примеру: #include<iostream> using namespace std; int main(){ char p; int i=3; p=i;
SFML Ошибка при установке SFML на CodeBlocks Уже видел похожую тему, но там ответа не нашел. Делал все по этому гайду : http://www.edparrish.net/common/sfmlcb.html Выдало ошибку. Файл с ней прикрепил. Подскажите, пожалуйста, что я мог сделать не так. подробнее

Показать сообщение отдельно
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
3119 / 1559 / 423
Регистрация: 18.10.2014
Сообщений: 2,885
21.11.2014, 22:21     Неоднозначность при наследовании
Цитата Сообщение от lenchis001 Посмотреть сообщение
преодолеть неоднозначность
Для разрешения неоднозначности в приведении типа вверх надо явно выполнить приведение к какому-нибудь более высокому типу, к рамках которого дальнейший путь наверх является уже однозначным.

Т.е.

C++
1
2
3
p = static_cast<right1 *>(&ob);
// или
p = static_cast<left2 *>(&ob);
в зависимости от того, в какой конкретно базовый подобъект типа 'base' вы хотите попасть.

Неоднозначность в вызове 'ob.who();' можно разрешить либо приведением типа объекта (как показано выше), либо указанием квалифицированного имени метода в вызове

C++
1
ob.left2::who();
Однако помните, что квалифицированное имя подавляет виртуальность вызова (если она есть). Поэтому предпочтительнее приведение типа.

Можно также указать, какой именно метод вы предпочитаете при вызове через 'result' при помощи 'using'

C++
1
2
3
4
5
6
class result :public right1, public left2{
public:
  using right1::who;
  // или
  using left2::who;
};
Цитата Сообщение от lenchis001 Посмотреть сообщение
а также в случае, когда метод в классе base виртуальный.
Когда метод является виртуальным, тогда вам придется вручную реализовать метод 'who' в классе 'result'. В противном случае линейки виртуальных функций с корнями в 'left2::left1::base' и 'right1::base' останутся несоединенными. Через одну базу 'base' будет вызываться 'left2::who', а через другую 'right1::who'. Вышеприведенный вариант с 'using' не создает final overrider для 'who' в классе 'result'. Поэтому функцию 'who' для 'result' придется написать руками.

Но это уже вопрос того, что вы хотите получить в результате. Т.е. хотите ли вы соединить эти линейки.
 
Текущее время: 04:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru