Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Таймер в програме Как сделать такой таймер: Нужно, чтобы значение переменной некоторого объекта увеличивалось через определенный интервал времени. При этом чтобы можно было вводить значения с клавиатуры. Просто чтобы объект сам модифицировался где-то на заднем плане. Без потоков можно как-то. winApi???? Добавлено через 52 минуты up up up https://www.cyberforum.ru/ cpp-beginners/ thread389684.html Сортировка вставкой C++
Всем привет. Задали задание написать код сортировки вставкой. Писал код по блок-схеме. Код получился нерабочий. Помогите найти ошибку. #include <stdio.h> #include <conio.h> int main() { int a; int n, i, j, x; printf ("Enter the number of elements "); scanf ("%d", &n);
C++ Перегрузка операторов Доброго времени суток. на завтра надо сделать работу, а я не могу понять как использовать перегрузку операторов. помогите пожалуйста разобраться вобщем надо найти количество значений переменных типа _Floors, _Flats, _Rooms.., вот код... // BSU012.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> https://www.cyberforum.ru/ cpp-beginners/ thread389680.html C++ Не могу объявить массив указателей на объект https://www.cyberforum.ru/ cpp-beginners/ thread389679.html
Здравствуйте! Такой вопрос. При объявлении массива указателей на объект появляются 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 = *A; for(j = m; j < r; j++) *Ax = *A; for(int k(l); k <= r; k++) if(Ax->Getoffset() < Ax->Getoffset()) *A = *Ax; else
C++ рестарт
как сделать автоматический рестарт программы после окончания ее работы? на примере
C++ Преобразование числа в символ. https://www.cyberforum.ru/ cpp-beginners/ thread389657.html
Здравствуйте, пишу программу перевода числа из Р-ичной системы счисления в Q-ичную. Столкнулся с такой вот проблемкой... При Q<10 все работает корректно, а вот при Q>10 вместо букв A,B,C,D.... выдаются цифры 10, 11, 12, 13.... соответственно, что само по себе естественно. Хочу сделать так: если остаток при целочисленном делении равен 10, 11, 12.... , то вместо цифр выдать на печать (или поместить...
C++ Почему не делит по заданному разделителю k??? #include <string.h> #include <iostream.h> #include <stdio.h> int main() {char st, st1, st2; int i,j,k,s,lenth; cout<<"Vvedite stroky:"<<endl; gets(st); cout<<"Vvedite dliny pervoi podstroki k"<<endl; https://www.cyberforum.ru/ cpp-beginners/ thread389636.html R+ дерево. Реализация C++
Нужно составить минимальную реализацию R+ дерева(поиск, добавление). Может кто помоч? Может кто знает хорошую литературу?
C++ Строки через std::string https://www.cyberforum.ru/ cpp-beginners/ thread389623.html
Дана строка, слова в которой состоят из букв латинского алфавита и десятичных цифр. Остальные символы – разделители между словами. Получить новую строку, выполняя в заданной строке замены по следующему правилу. Все слова, имеющие длину менее 5 символов и состоящие только из цифр, заменяются словами, получаемыми из исходных путём дописывания ведущих нулей до получения длины слова, равной 5. Все...
C++ Матрицу я сделала а вот с седловыми точками ...( #include "stdafx.h" #include "conio.h" #include "stdlib.h" int main() { printf("How many columns :> \t"); int x=0; scanf("%d",&x); printf("How many strings:> \t"); int y=0; scanf("%d",&y); int **m; m=new int* ; for (int i=0; i<y; i++) https://www.cyberforum.ru/ cpp-beginners/ thread389622.html
C++ Что то с програмой
Сделал метод итерации, но програма после компиляции как бегущая строка бежит, и я не вижу результата... в чем ошибка програми? #include <iostream.h> #include <conio.h> #include <math.h> int main() { int k=0; float eps,x1,xn1,x2,xn2,x3,xn3; cout<<"Vvedit x1="; cin>>x1;
C++ Определить, являются ли функции четными или нечетными помогите решить плиз задачу!!!!!!! Дано три функции у1=х*х*х;у2 = х*х*х+1и у3=1/1+х*х Определить, являются ли эти функции четными или не четными https://www.cyberforum.ru/ cpp-beginners/ thread389588.html
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.11.2011, 10:50 0

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

23.11.2011, 10:50. Показов 13181. Ответов 101
Метки (Все метки)

Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Bers Посмотреть сообщение
Вот вы и объясните почему?
Позволь я объясню. Но это объяснение подходит только для компилятора MSVC, т.к. реализация виртуальных функций никак не регламентирована и реализуется разработчиками по своему усмотрению.
Итак MSVC:
В начале каждого объекта, содержащего виртуальные функции, записывается адрес используемой им таблицы виртуальных функций. Адрес объекта совпадает с указателем на эту таблицу. Виртуальные функции добавляются в эту таблицу в том же порядке, в котором они объявлены в классе. Вызов происходит не напрямую по адресу, а через индекс этой функции. Т.е. вместо непосредственного использования адреса функции, происходит индексированный доступ к таблице и вызов функции по соответствующему адресу.
При множественном наследовании всё усложняется. Для первого базового класса указатель по прежнему записан в самом начале, затем идут данные-члены этого класса и только потом указатель на таблицу второго базового класса. Когда ты выполняешь приведение типа с помощью dynamic_cast, адрес объекта изменяется, т.к. он переносится на "начало" объекта второго базового класса. Ты можешь это легко проверить, выводя адрес объекта после кастования.
Используя reinterpret_cast (круглые скобки это он и есть в данном случае), ты интерпретируешь указатель на один объект, как указатель на другой. Программа бы могла упасть, но прототипы функций одинаковые, поэтому порчи стека не происходит. Данные объекта тоже не используются. Но происходит индексированый доступ функции. Что ты и видишь в консоли.
Можешь добавить в классы поля и попробывать их выводить в консоль (но не изменять) и зразу увидишь, что там не то, что ты ожидаешь.

И это не грабли полиморфизма, это некорректная программа. Не зря ведь говорят ЗАБУДЬТЕ ПРО ПРИВЕДЕНИЕ ТИПОВ В СТИЛЕ Си.

Вернуться к обсуждению:
Неочевидные грабли полиморфизма с++ C++
4
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2011, 10:50
Готовые ответы и решения:

Неочевидные особенности выдачи pg таблиц
Я довольно много копаюсь в pg_* таблицах, дабы получать информацию о базе данных и прочих системных...

Неочевидные результаты очевидных css-свойств
Добрый вечер, господа верстальщики! Столкнулся с такой неочевидной для меня проблемой:...

Грабли с кодировкой
Здравствуйте! В конструкторе главного окна: MainWindow::MainWindow(QWidget *parent) : ...

Xmega грабли
Так понимаю, мало кто в форуме xmega занимается, но вдруг кому полезно будет. Они, конечно, описаны...

101
23.11.2011, 10:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2011, 10:50
Помогаю со студенческими работами здесь

Грабли с USART_FLAG_RXNE
Решил тут создать сообщение, чтобы поделиться ошибкой, что я ловил пол дня. Есть у арма регистр,...

Наступлю на те же грабли?
Здравствуйте. Регистрировал доменное имя через jino.ru, а они согласно whois использовали...

Грабли с WM_DEVICECHANGE
Потратил кучу времени на изучение структур связанных с WM_DEVICECHANGE. Все работает как надо...

Грабли malloc/free
С динамической памятью впервой работаю, от сюда и грабли Есть структура typedef struct {...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru