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

Неочевидные грабли полиморфизма с++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Таймер в програме http://www.cyberforum.ru/cpp-beginners/thread389684.html
Как сделать такой таймер: Нужно, чтобы значение переменной некоторого объекта увеличивалось через определенный интервал времени. При этом чтобы можно было вводить значения с клавиатуры. Просто чтобы...
C++ Сортировка вставкой Всем привет. Задали задание написать код сортировки вставкой. Писал код по блок-схеме. Код получился нерабочий. Помогите найти ошибку. #include <stdio.h> #include <conio.h> int main() { int... http://www.cyberforum.ru/cpp-beginners/thread389681.html
C++ Перегрузка операторов
Доброго времени суток. на завтра надо сделать работу, а я не могу понять как использовать перегрузку операторов. помогите пожалуйста разобраться вобщем надо найти количество значений переменных...
Не могу объявить массив указателей на объект C++
Здравствуйте! Такой вопрос. При объявлении массива указателей на объект появляются 3 ошибки. void Cindex::merge(Ckey *A, int l, int m, int r) { int i, j; Ckey *Ax; for(i = m+1; i > l; i--) *Ax...
C++ рестарт http://www.cyberforum.ru/cpp-beginners/thread389674.html
как сделать автоматический рестарт программы после окончания ее работы? на примере
C++ Преобразование числа в символ. Здравствуйте, пишу программу перевода числа из Р-ичной системы счисления в Q-ичную. Столкнулся с такой вот проблемкой... При Q<10 все работает корректно, а вот при Q>10 вместо букв A,B,C,D....... подробнее

Показать сообщение отдельно
Bers
Заблокирован
24.11.2011, 09:00  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Слово "указатель" семантично равнозначно добавлению * к названию типа. Т.е. "тип int*" и "указатель на тип int" это одно и то же.
Несколько раз перечитывал запись, пытаясь понять.
Всегда считал, что int* это и есть указатель

Сам по себе указатель - это и есть тип.

Другое дело, что переменная типа указатель содержит адрес объекта.
И эту переменную так же называют указателем.
C++
1
2
3
A* ptr = new C; //семантически, A* это объявление указателя типа A
                        //ptr - указатель типа A                        
                        //ptr - это указатель, который смотрит на объект типа C
В чем здесь подвох? Подвох в том, что "ptr указатель на A".
О том, что на самом деле он смотрит на объект типа C знают только программисты, да может быть всякие там динамик_касты.
Компилятор же считает, что указатель_на_тип априори указывает на объекты такого же типа.

Указатель_на_тип - нужно понимать, как тип самого указателя.

По сабжу, есть только два варианта:
1 Либо забить на производительность и юзать динамик_касты.
2 Либо программист сам отдаёт отчет в том, куда в каждый момент времени смотрят указатели, и какие там на самом деле живут объекты. И не допустить срезки.
Самый простой способ добиться такого эффекта - не юзать множественное наследование при полиморфизме. И вообще не делать глубоких/широких наследований. Тогда не придётся втыкать в низко-уровневую работу полиморфизма.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru