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

Вызов виртуальной функции по указателю - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проверить массив на инициализированность http://www.cyberforum.ru/cpp-beginners/thread611373.html
std::list<my_type> c ; при с.push_back(my_type что_угодно) ; нужно скопировать значения одного массива А в массив В ,при этом не известно было ли в массиве В что-нибудь до этого ,закинутого туда пользователем .0xcdcdcdcd сейчас адрес ,но там будет что угодно в релизной версии,коли правильно я понял .
C++ В чём отличие switch и if? Препод задал вопрос, я ответил, то что switch использует только int и char, возвращается не логическое выражение, а целое... Она спросила, какие ещё есть отличия http://www.cyberforum.ru/cpp-beginners/thread611308.html
C++ Объявление класс в нескольких файлах
Можноли как-то объявление одного класса разбить на несколько заголовочных файлов? Хочу создать класс, в котором основной функционал находится в одной паре *.h, *.cpp, а дополнительный в других. Что бы при написании программ можно было подключать нужный мне функционал и не компилировать лишнее.
Нарисовал блок схему нужно проверить C++
Рисую блок схему первый раз за 2 года.. вот код программы #include <windows.h> #include <string> #include <iostream> #include <iomanip> #include <fstream> #include <stdio.h> #include <conio.h> #include <stdlib.h>
C++ Сравнение одночленов X со степенями http://www.cyberforum.ru/cpp-beginners/thread611205.html
Здравствуйте. Есть задача: Дана запись многочлена (от переменной X) произвольной степени с целыми коэффициентами, причем его одночлены могут быть и не упорядочены по степеням X, а одночлены одной и той же степени могут повторяться, например: -8x^4-74x+8x^4+5-x^3 Требуется привести подобные члены в этом многочлене, после чего распечатать его по убыванию степеней X. Как я понимаю сначала...
C++ Найти целую часть суммы чисел Исходные данные: x=12 a=9,5 Найти целую часть суммы чисел G, I, U подробнее

Показать сообщение отдельно
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.06.2012, 02:13     Вызов виртуальной функции по указателю
рассположение зависит от компилятора. чтобы узнать наверняка, нужно задиассемблировать строку получения указателя на type_info.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
class Base
{
public:
  virtual ~Base() {}
};
 
class Der : public Base
{
};
 
int main(int argc, char argv[])
{
  Der der;
  Base& rBase = der;
  const std::type_info* pTypeInfo = &typeid(rBase);
  std::cout << "address of typeinfo for " << pTypeInfo->name() << " = " << pTypeInfo << std::endl;
  return 0;
}
В студии эта строка в дизасме выглядит так:
// const std::type_info* pTypeInfo = &typeid(rBase);
00414772 mov eax,dword ptr [ebp-20h]
00414775 push eax
00414776 call @ILT+50(___RTtypeid) (411037h)
0041477B add esp,4
0041477E mov dword ptr [ebp-2Ch],eax

Т.е. идет вызов функции ___RTtypeid с передачей ей указателя на объект. Студия так же говорит, что она в файле rtti.cpp. Вот что-то похожее нашел тут:
http://code.google.com/p/ontl/source...rtti.cpp?r=741
Вот кому нужно - попробуйте разобратся. Код достаточно хитрый. Наверно из-за того, что нужно учитывать всякие множественные наследования + всякие другие провреки
 
Текущее время: 11:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru