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

Не могу понять виртуальное наследование - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Каков алгоритм программы? http://www.cyberforum.ru/cpp-beginners/thread966782.html
Даны произвольные числа a b c.Написать программу,которая проверяла бы,можно ли построить треугольник с такими длинами сторон, и если можно, то определить вид треугольника по соотношению сторон (равносторонний, равнобедренный, разносторонний) и по соотношению углов( остроугольный ,прямоугольный, тупоугольный). По результатам проверки вывести на экран соответствующее сообщение. #include...
C++ Напишите программу для расчета по двум формулам Напишите программу для расчета по двум формулам. Предварительно подготовьте текстовые примеры по второй формуле с помощью калькулятора (результат по первой формуле должен совпадать со второй). Для их использования необходимо подключить к программе заголовочный файл <math.h>. Нужно программировать на С++. Не могу не как разобраться( помогите мальчишки) http://www.cyberforum.ru/cpp-beginners/thread966769.html
C++ Исправить ошибки в коде
Помогите исправить ошибки(( #include <fstream> #include <iostream> #include <string.h> #include <cstdio> #include <cstdlib> #define n 10 using namespace std; struct scan { char model; //назва моделі
C++ Вылетает программа, укажите ошибку
Программа вылетает. Помогите пожалуйста. Условие программы: В программе используется класс good_time и перегрузка оператора сложения. Время задается как строка символов вида ЧЧ@ММ@СС, где @ - любой из разделителей: запятая, точка, двоеточие или пробел. Если не заданы секунды (СО, минуты (ММ) или часы (ЧЧ), для них принимается нулевое значение. #include "stdafx.h" #include <iostream>...
C++ Как объект записать в файл? http://www.cyberforum.ru/cpp-beginners/thread966763.html
Подскажите пожалуста как объект abbonent записать в файл #include "stdafx.h" #include"Name.h" #include"phone_book.h" int _tmain(int argc, _TCHAR* argv) {
C++ чтение данных из открытого файла (fread) if (_wfopen_s(&f, file_name, L"rtS, ccs=UTF-8") == 0){ fread((void*)rf, sizeof(wchar_t), 512, f); fclose(f); _wremove(file_name); wprintf_s(rf); подробнее

Показать сообщение отдельно
IO8
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 3
01.10.2013, 22:19  [ТС]     Не могу понять виртуальное наследование
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
class A
{
    int a;
public:
    void foo(){ a = 0;};
};
 
class B1 : virtual public A
{ 
    int b1;
};
 
class B2 : virtual public A
{
    int b2;
};
class C : public B1, public B2
{
    int c;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    С c;
    c.foo();
 
    return 0;
}


Теперь вызов c.foo() не вызывает никаких проблем, т.к. компилятор автоматически выполняет все необходимые преобразования для приведения типов. Сейчас в иерархии находится только один подобъект класса A, поэтому конфликта не возникает.

Реализация таблицы виртуальных классов (ТВК) никак не регламентируется и лежит на совести разработчиков компилятора. Я для примера разберу, что делает компилятор MS VC++ 2003 .NET, чтобы вы лучше понимали что происходит.

Итак, будем рассматривать классы из предыдущих примеров. При создании класса C компилятор формирует в памяти следующие структуры:



Таблицы виртуальных классов содержат смещения относительно начала класса для доступа к полям класса А. Так ТВК для B1 содержит смещение 0x18 (24) относительно начала класса B1 для доступа к полям класса A. Обратите внимание, что первый элемент ТВК содержит нулевое смещение. Очевидно, что это смещение для доступа к собственным полям. ТВК для B2 содержит уже другое смещение, т.к. его позиция в пределах всего класса C уже другая. ТВК, как и таблицы виртуальных функций, распределяются статически. Т.е. одна копия таблицы используется всеми классами типа C.




Почему Таблица Виртуальных Классов содержит эти значения? Объясните. А то вообще не разберусь с этой темой
Миниатюры
Не могу понять виртуальное наследование  
 
Текущее время: 01:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru