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

Неоднозначность и multiple inheritance - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
26.10.2013, 23:37     Неоднозначность и multiple inheritance #1
Есть такая иерархия и main():
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <string>
#include <complex>
using namespace std;
 
class Base {
public:
    void print(string s) const { cout <<"Base::print(string)" <<endl;}
};
 
class Derived1 : public Base {
public:
    void print(int i) const {cout <<"Derived1::print(int)" <<endl;}
};
 
class Derived2 : public Base {
public:
    void print(double d) const {cout <<"Derived2::print(double)" <<endl;}
};
 
class MI : public Derived1, public Derived2 {
public:
    void print (complex<double> cd) const {cout <<"MI::print(complex<double>)" <<endl;}
};
 
int main()
{
    MI mi;
    string dancer("ASD");
    mi.print(dancer);
    return 0;
}
Что нужно изменить в определении класса MI, чтобы устранить неоднозначность? Квалификация Base:: print при вызове не помогает, так как он базовый для двух классов Derived1{,2} одновременно... ничего не идет в голову
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2013, 23:37     Неоднозначность и multiple inheritance
Посмотрите здесь:

C++ неоднозначность, explicit
C++ Generic inheritance. Templates
Templates. (concrete inheritance). question to destructor implementation C++
C++ Copy Constructor Question .Generic inheritance. Templates
C++ multiple definition
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
27.10.2013, 12:05     Неоднозначность и multiple inheritance #21
Цитата Сообщение от Jupiter Посмотреть сообщение
пруф?
5.2.7.5, 5.2.7.6
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.10.2013, 12:09     Неоднозначность и multiple inheritance #22
Цитата Сообщение от ct0r Посмотреть сообщение
Более того, тут нет RTTI, а поэтому именно в данном случае нет никакого отличия от static_cast, даже в скорости.
ещё пруф?
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
27.10.2013, 12:30     Неоднозначность и multiple inheritance #23
Цитата Сообщение от Jupiter Посмотреть сообщение
ещё пруф?
Тебе не очевидно, что RTTI не включается в неполиморфные типы? Или ты думаешь, что проверка откладывается на рантайм (где осуществляется с помощью RTTI), когда она может быть элементарно разрулена в компайл-тайм?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.10.2013, 13:15     Неоднозначность и multiple inheritance #24
Цитата Сообщение от ct0r Посмотреть сообщение
Тебе не очевидно, что RTTI не включается в неполиморфные типы? Или ты думаешь, что проверка откладывается на рантайм (где осуществляется с помощью RTTI), когда она может быть элементарно разрулена в компайл-тайм?
ни разу не очевидно. в с++ нельзя полагаться на очевидность.
вот стоял бы там какой-нибудь boost:: polymorphic_cast тогда да.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2013, 13:42     Неоднозначность и multiple inheritance
Еще ссылки по теме:

компилятор находит неоднозначность при вызове round(i) C++
C++ Неоднозначность при наследовании
Неоднозначность переменной count C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
27.10.2013, 13:42     Неоднозначность и multiple inheritance #25
Цитата Сообщение от Jupiter Посмотреть сообщение
ни разу не очевидно. в с++ нельзя полагаться на очевидность.
вот стоял бы там какой-нибудь boost:: polymorphic_cast тогда да.
Хорошо. Пруф от Страуструпа
This (the upcast) is the uninteresting case. However, it is reassuring to know that dynamic_cast doesn’t allow accidental violation of the protection of private and protected base classes. Since a dynamic_cast used as an upcast is exactly like a simple assignment, it implies no overhead and is sensitive to its lexical context.
The purpose of dynamic_cast is to deal with the case in which the correctness of the conversion cannot be determined by the compiler.
Кстати причем тут polymorphic_cast? Это просто обертка. Может ты имел ввиду polymorphic_downcast, который в режиме NDEBUG превращается в static_cast? Но, так или иначе, риторический вопрос: почему polymorphic_downcast есть, а polymorphic_upcast нету?
Yandex
Объявления
27.10.2013, 13:42     Неоднозначность и multiple inheritance
Ответ Создать тему
Опции темы

Текущее время: 08:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru