Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Сформировать массив из индексов https://www.cyberforum.ru/ cpp-beginners/ thread311227.html
Дан числовой массив A. Сформировать массив B, элементы которого равны индексам отрицательных элементов массива A.
Функция для вызова нового окна. C++
Здравствуйте. Есть программа на C++ написана в консольном варианте. Мне нужно привязать это консольное окно к кнопке - то есть , я создаю Windows Form - рисую кнопки и нужна функция которая будет вызывать новое окно с моим консольным приложением. Надеюсь понятно объяснил))) Помогите пожалуйста! Добавлено через 30 минут удалите пжл.
C++ извлечение флешки https://www.cyberforum.ru/ cpp-beginners/ thread311219.html
господа,а как можно програмно сделать безопасное извлечение флешки?
C++ Копирование данных из файла в файл Здравствуйте! Нужно организовать копирование данных из одного файла в другой в бинарном режиме. При выполнении программы в выходной файл вместо нужного текста копируются неизвестные символы. В чём может быть ошибка? // Копирование файла в бинарном режиме #include <iostream> #include <fstream> #include <cstdlib> #include <string> https://www.cyberforum.ru/ cpp-beginners/ thread311200.html
Структура и работа с файлом C++
Здравствуйте! Посмотрите в чем моя ошибка, пожалуйста Дан файл f, содержащий сведения о книгах. Сведения о каждой из книг-это фамилия автора,название и год издания. Найти название книг данного автора,изданных начииная с 1960 года. И второй вопрос, как должна быть написана инфа в самом файле #include <stdio.h> #include <iostream> #include <stdlib.h> #include <conio.h> using namespace...
C++ MySQL Для диплома! нужна красивая теория языком программиста Почему MySQL лучше остальных программ? https://www.cyberforum.ru/ cpp-beginners/ thread311198.html
C++ Ошибка void void L1 { int i,k,c,h,d; char e; d=0; for (i=0,k=0,h=0;m!='\0';i++,k++,h++) { t1=m2; e=m2; for (c=0;c!=h;c++) https://www.cyberforum.ru/ cpp-beginners/ thread311192.html C++ распределение памяти
размещение памяти. LPVOID trm = VirtualAlloc(NULL, lasth+1*(sizeof (float)), MEM_COMMIT, PAGE_READWRITE); мне нужен указатель тип float на начало этой памяти, как сделать?
C++ Нобходимо считать ввод с консоли ПОСЛОВНО https://www.cyberforum.ru/ cpp-beginners/ thread311165.html
Вот я написал, но выдаётся какая-то херь, наберите qq ww ee и увидите сами; Кроме того, предполагается, что поток будет состоять из одного слова, а значит, должно сработать qqq<Enter> Но не срабатывает, просто ничего не видно. Помогите разобраться, друзья! #include <iostream> #include <string> using namespace std;
C++ компонент CheckListBox мне нужны методы компонента CheckListBox , подробно описанные и расписанные... помогите с поиском этой информации) https://www.cyberforum.ru/ cpp-beginners/ thread311154.html
Лабиринт! C++
Нужно написать программу на С++(с помощью ООП, через классы), которая генерирует лабиринт и ищет из него выходы(самые короткий и длинный путь). Просто программу надо срочно сдавать, а я с ООП вообще не дружу.
C++ Поменять местами две строки матрицы https://www.cyberforum.ru/ cpp-beginners/ thread311137.html
Здравствуйте. Возникла задача: необходимо поменять местами две строки матрицы, первую строку с той, где находится максимальный элемент, при этом в готовой матрице этот максимальный элемент поменять местами с самым первым элементом: Пример: Входная матрица: 3 4 1 5 6 2 0 1 3 ...
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
03.06.2011, 16:40 0

Как вызвать виртуальную функцию из дочернего класса, если она определена и вызывается в конструкторе РОДИТЕЛЬСКОГО класса? - C++ - Ответ 1721891

03.06.2011, 16:40. Показов 10200. Ответов 19
Метки (Все метки)

Ответ

Evg, по-моему первым делом создается таблица виртуальных ф-ций и VPTR (указатель на эту таблицу) инициализируется первым делом при входе в конструктор (на MSVS VPTR имеет смещение 0, относительно объекта), а значит в конструкторе уже можно использовать виртуальные ф-ции. Другое дело, что надеется на это не стоит, т.к. в стандарте это не прописанно, а значит не факт, что какой-нибудь компилятор не сделает по другому.
Но вот такой код работает (пришлось изменить имя класса с sin на sinn, иначе студия негодовала)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
 
 
 
//Это вот базовый класс
                         //++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class base{
 public:
 
  //А вот в этом конструкторе и будет вызываться виртуальная функция
  base ();         
 
  //Вот эту фунцию я сделал виртуальной
  virtual void f (){cout<< "Вот её текст, его я видеть не хочу!"<< endl;};
 //Это просто деструктор
  ~base () {}         
};
 
       
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                         //++++++++++++++++++
 
 
//А это вот доченрний класс
                         //++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class sinn: public base {
 public:
  sinn ():base(){};
  ~sinn () {};
 
  //Вот виртуальная функция, которую я переопределяю и которую очень хочется вызвать в конструкторе 
  //этого класса
  void f () ;
};
 
 base::base () {
 reinterpret_cast<sinn*>(this)->sinn::f();
}  
void sinn::f () {
 cout<< "Вот этот текст я хочу увидеть, но не получается"<< endl;
};
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                         //++++++++++++++++++
 
 
 
int main() {
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 sinn k;
 getchar ();
}
kravam, следует учесть, что это лютый быдлокод, и делать так, конечно же, не нужно)

Вернуться к обсуждению:
Как вызвать виртуальную функцию из дочернего класса, если она определена и вызывается в конструкторе РОДИТЕЛЬСКОГО класса? C++
1
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2011, 16:40
Готовые ответы и решения:

Как вызвать функцию родительского класса?
#include &lt;iostream&gt; using namespace std; class foo{ void somefunc(); public: int...

Как из метода производного класса вызвать поле родительского класса
Добрый день! Помогите пожалуйста вызвать поле базового класса из метода производного класса. Код,...

Как вызвать метод вложенного класса в методе родительского класса
Имеется родительский класс для прорисовки графики Jogj package objects; import...

Может ли метод родительского класса обратиться к полю дочернего класса
Может ли метод родительского класса обратиться к полю дочернего класса?

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

Обращение к методу дочернего класса из экземпляра родительского класса
Как обратиться к методу дочернего класса из экземпляра родительского класса? К примеру здесь как...

В конструкторе вложенного класса инициализируется приватное поле. Потом вызывается функция-метод этого класса и выводит значение этого поля НО НЕ ТО!
Друзья! Почему так? #include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; //Вот...

Как вызвать метод родительского класса;
Собственно вопрос; Есть класс a и b; Класс b унаследован от класса a; И как теперь из класса b...

Ссылка на метод дочернего класса из родительского
Всем привет! Я новичок в C++. Помогите, пожалуйста, сослаться из родительского класса на метод,...

Доступ к полям дочернего класса из родительского
Вопрос это нормально что this.GetType() Возвращает тип дочернего класса а не родительского? А...

Как вызвать метод дочернего класса при приведении типов?
Привет у меня есть класс (Батя) и парочка дочерних классов в классе Батя есть метод void...

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