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

Инициализация членов производного кл. из конструктора базового кл. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ try catch для int; http://www.cyberforum.ru/cpp-beginners/thread561721.html
Как работает try?? ни как не могу понять. как сделать что бы при вводе текста в переменную int выдавал ошибку а не вылетала.. Добавлено через 1 минуту struct { int cod; int sent; } file;...
C++ Как записать несколько массивов, каждый в свой файл? Я недавно спрашивал здесь, как записать в файл. Мне подсказали. Вот такой вариант работает: #include <iostream> using namespace std; #include <fstream> #include <conio.h> // чтобы... http://www.cyberforum.ru/cpp-beginners/thread561715.html
C++ Изменить приоритет
Нужно написать свой диспетчер задач. Возникла проблема при изменение приоритетов процессов DWORD priorety; HANDLE hProcess; hProcess = OpenProcess(PROCESS_SET_INFORMATION, FALSE,...
C++ std::map не компилируется
Всем здравствуйте. Возникла проблема при попытке использования std::map в visual studio 2010. при подключении файла <map> и объявлении собственно экземпляра класса компилятор тут же начинает...
C++ Не выполняется замена в строке http://www.cyberforum.ru/cpp-beginners/thread561695.html
Задача стоит такая: "Напишите программу, которая шифрует сообщение с помощью rot13(каждая буква заменяется буквой, которая в английском алфавите стоит на 13 букв дальше, например a - n)" Написал...
C++ Работа с IDE Скажіть чому коли я запускаю програму нажимаючи F5 то дані я можу ввести,але результат не виводить і вікно зразу вибиває.....а коли нажимаю ctrl+F5 то не вибиває вікно вкінці і виводить результат!!!... подробнее

Показать сообщение отдельно
Pavel.fromBy
13 / 13 / 1
Регистрация: 31.12.2011
Сообщений: 83

Инициализация членов производного кл. из конструктора базового кл. - C++

29.04.2012, 20:04. Просмотров 754. Ответов 9
Метки (Все метки)

Добрый вечер, уважаемые форумчане! Сразу код; вопрос ниже...

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
#include <iostream>
 
using namespace std;
 
class One
{
public:
    One(int _a);
};
 
class Two: public One
{
public:
    const int a;
    int b;
    Two(int _a): One(_a), a(3)
    {
        cout << "Two constrcutor!" << endl;
        cout << a << endl;
        cout << b << endl;
    }
};
 
One::One(int _a)
{
    cout << "One constructor!" << endl;
//  ((Two *)this)->a = _a;   не работает!
    cout << ((Two *)this)->a << endl;
    ((Two *)this)->b = 20;
}
 
int main()
{
    Two a1(2);
}
Почему я могу инициализировать непостоянные члены производного класса из конструктора базового? Почему я ВООБЩЕ их могу инициализировать? На сколько мне известно, при создании объекта производного класса сразу создается "базовая" часть, а потом "производная" (тут я может быть и не прав, не утверждаю). Откуда конструктор базового класса знает, что там творится у производного...?
Далее... Если выше раскомментировать строку ((Two *)this)->a = _a;, то компилятор ругнется, что левый операнд не может быть изменен (ибо это константа), а из этого следует, что она уже создана (но не инициализирована!!!). Константа инициализируется сразу после вызова конструктора базового класса в блоке инициализации, но она была УЖЕ создана (в конструкторе базового я вывел ее на консоль... получил мусор!)... Это ведь противоречит тому, что константы должны быть инициализированы сразу же после определения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru