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

Контруктор по умолчанию - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка при перегрузке операторов http://www.cyberforum.ru/cpp-beginners/thread396159.html
#include <stdio.h> #include <conio.h> class fraction { public: int numerator; int denominator; fraction(); fraction(int i){
C++ Не понимаю вопроса Упорядочить массив по убыванию элементов последнего столбца (использовать сортировку пузырьком). Что сие означает? я имею ввиду часть "по убыванию элементов такого-то столбца" http://www.cyberforum.ru/cpp-beginners/thread396120.html
Разделение числа на разряды C++
Подскажите,алгоритм программы,которая выполняет разделение числа на разряды. Т.е вводится число,например, 456 и программа выводит 400-50-46
C++ Чтение каталога
Не пойму, почему выдает ошибку сегментирования в 28 строке?:wall: int Showd(const char*dir_name, std::vector<std::string>*list) { /*lWin=newwin(21, 50, 2, 8); wattron(lWin, COLOR_PAIR(6)); box(lWin, ACS_VLINE, ACS_HLINE); wmove(lWin, 4, 10); wprintw(lWin, "F2(***)");
C++ Изменение палитры bmp изображения http://www.cyberforum.ru/cpp-beginners/thread396102.html
Ребят, помогите пожалуйста. У меня стоит задача изменить палитру в bmp изображении чтоб первые 118 цветов были белыми, а другие 118 черными. Другими словами палитра должна иметь вид: R G B 1 0 0 0 2 0 0 0 3 0 0 0 .. 118 0 0 0 119 255 255 255 120 255 255 255 121 255 255 255
C++ Нужно записать в файл четные числа Дано файл f компонентами которого являются натуральные числа. Получить в файле g все компоненты файла f: что есть четными числами подробнее

Показать сообщение отдельно
Bers
Заблокирован
01.12.2011, 02:57     Контруктор по умолчанию
thick_int, В этой теме присутствуют как минимум два момента, о которых я сам ни разу ни в одной книге для новичков не видел.

Сам я до этого дошёл лишь на личном опыте, и то - когда обжегся, и несколько часов искал ошибки, силясь понять, что за мистика творится с этим кодом.

Поэтому, обращаю ваше внимание на материал, которого скорее всего нет в вашей книге.

Момент первый: когда начинается тело конструктора хозяина, все данные члены уже построены!

Момент второй: избегай как огня данных-членов, которые зависят друг друга

Что бы это понять, внимательно изучите представленный ниже код:

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
36
37
38
39
class CSome
{
public:
    //здесь сначала инициализируется а
    //А объект b инициализируется уже построенным объектом а
 
    CSome(int val):a(val), b(a)
    { 
         /*вот здесь все данные-члены уже построены! */
    }
 
private:
    int a;
    int b;
};
 
class CSome1
{
public:
 
    //здесь тоже самое
    CSome1(int val):a(val), b(a){}
 
private:
    //я просто переставил местами 
    //очередность объявления объектов в классе
 
    int b;
    int a;
};
 
 
int main()
{
    
    CSome test(111); //a=111; b=111;
    CSome1 test2(333); //a=333; b=мусор
    return 0;
}
О чем говорит данная иллюстрация?
Сами объекты данные-члены конструируются в том порядке, в каком они объявлены в классе.
В CSome1 объект a не зависит от объекта b, и поэтому он конструируется корректно.
Но в тот момент, когда конструируется объект b, объекта а ещё не существует!!!
Поэтому, объект b конструируется мусором. Хотя в списках инициализации он вроде как на втором месте. Ошибка совершенно не очевидная.
Если не знаешь - можно долго втыкать, и думать: да что не так то?????

Если я не прав - пусть Сыроежка меня поправит.

/зы избегай как огня подобных зависимостей данных членов друг от друга. Ничайно поменять местами объявление a и b можно запросто. А вот искать причину, почему вроде бы рабочий класс вдруг начал тупить не по деццки будит ой как не просто.

Случай из жизни:
Я тогда только только начал ощущать "вкус жизни, или множественное наследование". И вовсю начал юзать списки инициализации, и вызывать базовые конструкторы классов.
Класс уже являлся частью довольно крупной архитектуры. При том, был полностью проверен.
Потом я сделал несколько модификаций в классе, и решил подправить код класса, что бы он красивее (читабельнее) смотрелся. Ну и по не знанию поменял данные-члены местами.

Никаких предупреждений, никаких ошибок компиляции. Просто иногда программа вела себя не корректно. Вместо нормального отчета выводила в файл такую ахинею....

А потом я несколько часов сидел в отладчике, безуспешно пытаясь понять: что не так?
 
Текущее время: 23:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru