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

Какая разница в инициализации? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Транспонировать матрицу F(10,8) http://www.cyberforum.ru/cpp-beginners/thread400016.html
Транспонировать матрицу F(10,8) и вывести на печать элементы главной диагонали и диагонали, расположенной под главной. Результаты разместить в двух строках.
C++ cin.getline работает через раз вот этот код работает прекрасно #include <iostream> using namespace std; void Open_Directory() { char *directory= new char; cin.getline(directory, sizeof(directory));... http://www.cyberforum.ru/cpp-beginners/thread400014.html
Шаблоны функций и классов C++
Нужносоздать шаблон функции возведения заданного числа в заданную степень (аналог функции pow() ). Шаблон класа Класс: матрица. Свойства: размеры, элементы матрицы. Методы: конструктор с...
C++ Дружественные функции и классы
1. Класс Пациент (имя, диагноз, рецепт, номер карты); 2. Класс Зав. отделением (имя) Описание предметной области – зав. отделением может менять номер карты пациента . Пожалуйсто помогите!!! ...
C++ ПЕРЕГРУЗКА ФУНКЦИЙ. ПЕРЕГРУЗКА ОПЕРАТОРОВ. http://www.cyberforum.ru/cpp-beginners/thread400009.html
1. Функция нахождения самого длинного слова (два, три и четыре слова). 2. Описать класс одномерный массив (вектор) целых чисел. Перегрузить следующую операцию: > присвоить всем элементам вектора...
C++ Абстрактные базовые классы Помогите решить пожалуйста!) Задание 1 . Создать базовый класс - фигура, и производные класс - круг, прямоугольник, трапеция. Определить виртуальные функции площадь, периметр и вывод на печать. ... подробнее

Показать сообщение отдельно
KristopherRobin
137 / 133 / 6
Регистрация: 11.09.2011
Сообщений: 407
06.12.2011, 11:19
1й случай это типа инициализация конструктора в памяти заведутся переменные сразу со занчениями (true, false) после чего пойдет выполнение конструктора.

2й тут заведутся переменные со случайными значениями (т.е. в переменных будут просто данные которые хранились в этой области памяти до того как переменные заняли эту область), после пойдет выполнение конструктора в котором им присвоятся значения (true, false)

в книгах советуют первый способ т.к. он быстрее. а еще таким способом нужно вызывать конструкторы базового класса с аргументами.

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
class A
{
public: 
    A() {};
    A(int NewA); //как в унаследованных классах вызывать именно этот конструктор?
 
    int VarA;
};
 
class B: public A //наследуем класс А
{
public:
    B() {};
    B(int NewA, int NewB);
 
    int VarB;
};
 
A::A(int NewA):VarA(NewA)
{
}
 
B::B(int NewA, int NewB):A(NewA),VarB(NewB)  //вызов конструктора класса А с аргументом
{
 
}


C++
1
2
3
B::B(int NewA, int NewB):VarA(NewA),VarB(NewB) //попытка инициализоровать переменную базового класса без конструктора. переменная еще не появилась - не был вызван констурктор базового класса, а мы ее уже пытаемся инициализировать, поэтому вылезет ошибка
{
}

C++
1
2
3
4
5
B::B(int NewA, int NewB)  //вызовется конструктор базового класса A() без агрументов
{
    VarA = NewA; //И только после этого можно пристваить переменной значение
    VarB = NewB;
}
C++
1
2
3
4
B::B(int NewA, int NewB):A(NewA),VarB(NewB)  //вызов конструктора класса А с аргументом
{
                                                  //самый быстрый вариант
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru