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

Что такое порядок инициализации таблицы виртуальных методов? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа со строками (удаление из строки указанного символа) http://www.cyberforum.ru/cpp-beginners/thread804268.html
Недавно начал изучать С++ в универе. Задали написать программу реализующую удаление из строки указанного символа. Программа компилируется, но правильно работать отказывается. Где я накосячил? ...
C++ File Ripper Всем привет. Заинтересовала тема для поиска файлов внутри файла. В данном случае интересует поиск только MPEG Layer 3 (т.е. mp3). Как его искать - без понятия. Нужна программа типа HyperRipper или... http://www.cyberforum.ru/cpp-beginners/thread804267.html
C++ Работа с бинарными файлами (программка дважды записывает последнее число)
Добрый день, помогите пожалуйста с такой ситуацией: написал програмку для заполнения бинарного файла рандомными числами (их количество вводится в начале программы): #include <iostream> #include...
Цикл с предусловием C++
#include <iostream> int main() { int s = 0; for (int i = 0; i <= 8; i++) { for (int j = 0; j <= 6; j++) { for (int k = 0; k <= 4; k++) { if (3 * i...
C++ Списки. Стеки. Очереди http://www.cyberforum.ru/cpp-beginners/thread804255.html
Квадрат разбит на {4}^{k} равновеликих квадратных клеток. Квадрат перегибается поочередно относительно вертикальной (правая половина подкладывается под левую) и горизонтальной (нижняя половина...
C++ MPI и scanf в С++ Вобщем я делаю параллельную программу. Все процессы в этой программе должны узнать некоторое целое число X, которое пользователь вводит с клавиатуры. Я пока знаю только один способ это осуществить -... подробнее

Показать сообщение отдельно
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
10.03.2013, 11:42
Цитата Сообщение от ValeryS Посмотреть сообщение
конструктор делится на две части
неявную, где происходит вызов родителя, инициализация переменных, инициализация таблицы,..... генерится автоматически
и явную описанную между скобками {}
Ну вообще в стандарте не про какую неявную часть ничего не сказано.

Пример - initialization list
C++
1
2
3
4
5
6
class A
{
public:
    A() : a(0) {}
    int a;
};
везде пишут, что инициализация из списка инициализации будет выполнена до начала выполнения конструктора. Но мы то знаем, что она будет выполнена в коде процедуры, реализующей конструктор, до начала выполнения тела конструктора.

Чтоб как-то разобраться в терминологии посмотрим стандарт, например вот про порядок инициализации
In a non-delegating constructor, initialization proceeds in the following order:
— First, and only for the constructor of the most derived class (1.8), virtual base classes are initialized in
the order they appear on a depth-first left-to-right traversal of the directed acyclic graph of base classes,
where “left-to-right” is the order of appearance of the base classes in the derived class base-specifier-list .
— Then, direct base classes are initialized in declaration order as they appear in the base-specifier-list
(regardless of the order of the mem-initializers).
— Then, non-static data members are initialized in the order they were declared in the class definition
(again regardless of the order of the mem-initializers).
— Finally, the compound-statement of the constructor body is executed.
в двух словах что все это значит - сначала будет инициализирвано то-то, потом то-то и в последний момент будет выполнено тело конструктора.
Что мы из этого можем вынести - то, что в стандарте все таки разделяются "конструктор" и "тело конструктора".
Но вернемся к предмету разговора

Цитата Сообщение от ValeryS Посмотреть сообщение
неявную ... и явную описанную между скобками {}
Ну думаю можно сказать и так. Но, например, если б я увидел такое определение в какой-нибудь книге по С++ и при этом автор не объяснил бы, что эти термины условны и подразумевают то-то то-то, то я бы усомнился в знаниях автора Другое дело если употреблять термины "явный" и "неявный", при этом объяснить что это несуществующие термины, которые введены в книгу для разделения тела конструктора и кода, который на самом деле содержится в конструкторе, то тогда норм
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru