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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ try catch для int; http://www.cyberforum.ru/cpp-beginners/thread561721.html
Как работает try?? ни как не могу понять. как сделать что бы при вводе текста в переменную int выдавал ошибку а не вылетала.. Добавлено через 1 минуту struct { int cod; int sent; } file; int _tmain(int argc, _TCHAR* argv)
C++ Как записать несколько массивов, каждый в свой файл? Я недавно спрашивал здесь, как записать в файл. Мне подсказали. Вот такой вариант работает: #include <iostream> using namespace std; #include <fstream> #include <conio.h> // чтобы использовать функцию getch() int main() { http://www.cyberforum.ru/cpp-beginners/thread561715.html
C++ Изменить приоритет
Нужно написать свой диспетчер задач. Возникла проблема при изменение приоритетов процессов DWORD priorety; HANDLE hProcess; hProcess = OpenProcess(PROCESS_SET_INFORMATION, FALSE, p->at(ProcessTable->currentRow()).th32ProcessID); switch(PriorityBox->currentIndex()) { case 5: {priorety = REALTIME_PRIORITY_CLASS; break;} case 4: {priorety =...
C++ std::map не компилируется
Всем здравствуйте. Возникла проблема при попытке использования std::map в visual studio 2010. при подключении файла <map> и объявлении собственно экземпляра класса компилятор тут же начинает ругаться и выдает кучу ошибок. http://i34.***********/big/2012/0429/8a/d22176268dc3d3657dbc158028cec98a.jpg Помогите, пожалуйста.
C++ Не выполняется замена в строке http://www.cyberforum.ru/cpp-beginners/thread561695.html
Задача стоит такая: "Напишите программу, которая шифрует сообщение с помощью rot13(каждая буква заменяется буквой, которая в английском алфавите стоит на 13 букв дальше, например a - n)" Написал такую программу: #include<iostream.h> #include<string.h> #include<conio.h> int main(){ string string1; cout<<"Enter your string:\n";
C++ Работа с IDE Скажіть чому коли я запускаю програму нажимаючи F5 то дані я можу ввести,але результат не виводить і вікно зразу вибиває.....а коли нажимаю ctrl+F5 то не вибиває вікно вкінці і виводить результат!!! Скажите, почему когда я запускаю программу, нажимая F5, то данные я могу ввести, но результат не выводит и окно сразу выбивает.....а когда нажимаю ctrl+F5, то не выбивает окно в конце и выводит... подробнее

Показать сообщение отдельно
Pavel.fromBy
 Аватар для Pavel.fromBy
13 / 13 / 1
Регистрация: 31.12.2011
Сообщений: 83
29.04.2012, 20:04     Инициализация членов производного кл. из конструктора базового кл.
Добрый вечер, уважаемые форумчане! Сразу код; вопрос ниже...

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;, то компилятор ругнется, что левый операнд не может быть изменен (ибо это константа), а из этого следует, что она уже создана (но не инициализирована!!!). Константа инициализируется сразу после вызова конструктора базового класса в блоке инициализации, но она была УЖЕ создана (в конструкторе базового я вывел ее на консоль... получил мусор!)... Это ведь противоречит тому, что константы должны быть инициализированы сразу же после определения.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru