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

Принудительный вызов метода родителя - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Объясните пожалуйста, в чем здесь дело(структура и указатель) http://www.cyberforum.ru/cpp-beginners/thread1492715.html
#include <iostream> #include <string> #include <windows.h> using namespace std; struct pizza { double diameter; string name; double weight;
C++ Сделать массив расширяемым Никак не получается сделать динамический массив расширяемым , помогите пожалуйста, где,что не так? #include<iostream> using namespace std; class myVector { int *arr, size,var,count; public: myVector(int s=5):var(0), size(s), count(0) { http://www.cyberforum.ru/cpp-beginners/thread1492661.html
C++ Работа с сайтами
Где найти информацию о том как взаимодействовать с сайтами(например вставить в поле логин - логин и т.д.).Работаю на Visual c++,MFC.Об CGI тоже пока не нашел понятной статьи.
Задача на Базу данных о продаже автомобилей C++
Помогите написать программу на поставленную задачу. Как мне сказали: программа должна получиться где-то 30-59 строчек кода. Вот само задание: Дан файл записей о продаже авто по след. структуре: Менеджер,марка Кол-во число строк в тексте заранее не известно. В другом файле в ед.строке вводится фамилия менеджера. Необходимо в 3-ем фале записать все продажи данного менеджера отсортированного...
C++ Вызов оконной функции в диалоговом окне http://www.cyberforum.ru/cpp-beginners/thread1492643.html
есть Добавлено через 7 минут есть программа с диалоговым окном и программа с оконной функцией, надо чтобы при нажатии кнопки в диалоговом окне выполнялась программа с оконной функцией, разное пробовал, но все безуспешно, может кто что посоветовать по этой проблеме?
C++ Рекурсивная функция выводящая содержимое вектора Никаких идей как это сделать. В книге всего пол страницы посвящены этой теме. подробнее

Показать сообщение отдельно
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
04.07.2015, 03:54     Принудительный вызов метода родителя
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
#include <iostream>
using namespace std;
class A
{
public:
    virtual void f()
    {
        cout << "A::F()" << endl;
    }
    virtual void onLoad()
    {
        cout << "A::onload()" << endl;
        f(); // если бы метод f не был бы виртуальным данная запись была бы эквивалентна реализационой компилятором 
        // записи A::f(this) или для внешнего вызова a.f();  --> A::f(&a);
        // но так как метод f виртуальный - его вызов определяется в момент конкретного вызова на этапе выполнения
        // через указатель в каждом экземпляре __vfptr.
        // Следовательно запись this->__vfptr->f(this); 
 
        this->A::f(); // Данная же запись отбрасывает вызов метода f() через таблицу виртуальных функций.
        // И так как для метода A::f() входным параметром является const A* this , то вызывая метод в 
        // производном классе onLoad - метод базового, иы передаем туда указатель A*.
 
        // Следовательно - верно ли утверждение, что при явном указании класса от которого нужно вызввать виртуальный
        // метод, вызов метода через виртуальную таблицу функций не используется.
 
        // И это вопрос на другую тему: если я правильно понимаю, при виртуальном наследовании класса в ромбовидной иерархии
        // к примеру, каждый экземпляр наследников хранит 4 байта информации, что предоставляет собой смещение - тоесть
        // разницу адрессов между адрессов экземпляра виртуального родителя и адрессом экземпляра наследника. Данные 4 байта
        // скрыты в дебаге от глаз, так как их использована чревато и используется лишь компилятором для организации работы с классом 
 
        
    }
};
class B : public A
{
    typedef A Parent;
public:
    virtual void f()
    {
        cout << "B::F()" << endl;
    }
    virtual void onLoad()
    {
        A::onLoad();
        cout << "B::onload()" << endl;
        f();
    }
};
int main()
{
    B b;
    b.onLoad();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru