Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
hastal
1 / 1 / 0
Регистрация: 16.01.2016
Сообщений: 97
#1

Виртуальная неоднозначность - C++

11.04.2016, 21:43. Просмотров 182. Ответов 5
Метки нет (Все метки)

Не понимаю пример из книги С.Праты:
C++
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
class B
{
public:
    short q();
};
 
class C : virtual public B
{
public:
    long q();
    int omg();
    ...
};
 
class D :public C
{
    ...
};
 
class E :virtual public B
{
private:
    int omg();
    ...
};
 
class F :public D, public E
{
    ...
};
"Если даже C::q() будет закрытым, он будет доминировать над D::q(). В этом случае в классе F возможен вызов B::q(), но неуточненный q() будет ссылаться на недоступный метод C::q()."
Почему метод базового класса закрывает метод производного класса?? Как это логически объяснить? Ведь обычно метод производного класса с таким же именем как у базового класса закрывает все сигнатуры этого метода в базовом классе.

Добавлено через 8 часов 52 минуты
Help pls
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2016, 21:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Виртуальная неоднозначность (C++):

неоднозначность, explicit - C++
Добрый вечер. написал такой шаблонный класс: template <class T> class Container { private: ...... public: ...

Неоднозначность декларации - C++
Итак уважаемые знатоки: class Foo{ public: Foo(){}; }; Foo Bar(); Внимание вопрос: как уважающий себя...

Неоднозначность и multiple inheritance - C++
Есть такая иерархия и main(): #include <iostream> #include <string> #include <complex> using namespace std; class Base { ...

Неоднозначность при наследовании - C++
Привет народ, думаю мой вопрос покажется вам чем-то из разряда "лучше бы делом занялся", но тех у кого останется терпение, прошу помочь мне...

Неоднозначность переменной count - C++
Доброго времени суток. Использую VS2013. Подскажите пожалуйста, по какой причине глобальная переменная, в приведенном ниже коде, не...

Неоднозначность при множественном наследовании - C++
Привет всем, столкнулся с проблемой при множественном наследовании классов. Надеюсь, кто-нибудь поможет как можно скорее. Ошибка...

5
Shamsik
-42 / 17 / 5
Регистрация: 23.12.2013
Сообщений: 521
Записей в блоге: 1
Завершенные тесты: 2
11.04.2016, 21:47 #2
https://habrahabr.ru/sandbox/41142/
0
hastal
1 / 1 / 0
Регистрация: 16.01.2016
Сообщений: 97
11.04.2016, 22:30  [ТС] #3
Цитата Сообщение от Shamsik Посмотреть сообщение
https://habrahabr.ru/sandbox/41142/
typedef std::tr1::shared_ptr<T> Ptr; Я не знаю шаблонов, поэтому мне не сильно понятен код, приведите мне, пожалуйста, пример без использования шаблонов, чтоб я смог его нормально понять. И то что в классе можно явно указывать член какого класса вызывать это и так ясно, я хочу понять то, что описал выше, то есть как и почему так это дело работает по-умолчанию.
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
11.04.2016, 23:18 #4
А всю программу можете привести?
0
hastal
1 / 1 / 0
Регистрация: 16.01.2016
Сообщений: 97
11.04.2016, 23:22  [ТС] #5
Цитата Сообщение от Mr.X Посмотреть сообщение
А всю программу можете привести?
Нет в книге всего один участок кода, который я полностью переписал и два небольших абзаца текста. Я привел половину абзаца, которую я не понимаю. Написать полный текст?
0
Shamsik
-42 / 17 / 5
Регистрация: 23.12.2013
Сообщений: 521
Записей в блоге: 1
Завершенные тесты: 2
11.04.2016, 23:28 #6
typedef используется для приданию стандартным типам (...) нового имени.

C++
1
2
3
4
typedef std::tr1::shared_ptr<T> Ptr;
 
 
//Ptr - Можете использовать как  std::tr1::shared_ptr<T>
Добавлено через 38 секунд
https://msdn.microsoft.com/ru-ru/library/bb385731.aspx


Wikipedia Тут найдете ответ на ваш вопрос почитайте
0
11.04.2016, 23:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2016, 23:28
Привет! Вот еще темы с ответами:

компилятор находит неоднозначность при вызове round(i) - C++
Доброго времени суток! Подскажите, компилятор находит неодназначтность в строке 26 *вызов функции round(i)* ...

Виртуальная функция - C++
Ругается на метод virtual bool isOveersize() из класса publication. Что не так ? #include &quot;stdafx.h&quot; #include &lt;string&gt; #include...

Виртуальная функция - C++
В учебнике дается понятие абстрактного класса, как класса содержащего хоть одну виртуальную функцию. Проблема в том, что я так и не...

Виртуальная функция - C++
Создайте класс Matematica, определите в нем виртуальную функцию-член matem(int x, int y), которая выводит на экран значения параметров....


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru