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

Прокомментировать код - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Михаил Кричук
1 / 1 / 0
Регистрация: 14.04.2012
Сообщений: 42
01.06.2012, 00:01     Прокомментировать код #1
Может кто нибудь помочь с комментариями просто очень надо)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// x.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "stdafx.h"
#include "iostream"
using namespace std;
 
class massiv {public:
int n, *S;
massiv (int =5);
void vvod();
void vuvod();
int max();
int min();
void sort();
};
 
massiv::massiv (int nn)
{ n=nn;
S=new int [n];
}
 
void massiv::vvod()
{
    cout<<"Введите количество элементов массива: ";
    cin>>n;
    for (int i=0;i<n;i++)
    {
        cout<<"\n S["<<i<<"]=";
        cin>>S[i];
    }
}
 
void massiv::vuvod()
{
    for (int i=0;i<n;i++)
        cout<<"\t"<<S[i];
    cout<<endl;
}
 
int massiv::max ()
{
    int i;
    int N=0;
    for (i=0;i<n;i++)
        if (S[N]<S[i])
            N=i;
    return (N);
}
 
 
int massiv::min ()
{
    int i;
    int N=0;
    for (i=0;i<n;i++)
        if (S[N]>S[i])
            N=i;
    return (N);
}
 
void massiv::sort()
{
    int N,k,buf;
    for (int i=0;i<n-1;i++)
    {
        N=i;
        for (k=i+1;k<n;k++)
        if (S[k]>S[N]) N=k;
        buf=S[i];
        S[i]=S[N];
        S[N]=buf;
        
    }
}
 
void main()
{
    setlocale (LC_CTYPE,"rus");
    massiv S;
    S.vvod();
    cout<<"Максимальный элемент равен "<<S.S[S.max()]<<", его индекс: " <<S.max()<<endl;
    cout<<"Минимальный элемент равен "<<S.S[S.min()]<<", его индекс: "<<S.min()<<endl;
    cout<<"Отсортированный массив:"<<endl;
    S.sort();
    S.vuvod();
    system ("PAUSE");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2012, 00:01     Прокомментировать код
Посмотрите здесь:

Прокомментировать код C++
прокомментировать код C++
C++ Прокомментировать код
Прокомментировать код C++
C++ Прокомментировать код
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asidorchenko
379 / 205 / 25
Регистрация: 09.04.2012
Сообщений: 635
01.06.2012, 12:09     Прокомментировать код #2
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// x.cpp: определяет точку входа для консольного приложения.
// это комментарий. Другим способом комментирования является /* комментарий */
 
// включение заголовочных файлов.
#include "stdafx.h" 
#include "stdafx.h" // включение одного и того же заголовочного файла во второй раз. Обычно так делать нельзя.
#include "iostream" // включение заголовочного файла. Кавычки вида " обычно обозначают, что файл является "пользовательским", то есть находится там же где проект. Обычно принято писать #include <iostream> так как это стандартный заголовочный файл, а для стандартных заголовочных файлов используются кавычки вида <>. В языке C++ не принято писать .h после имен заголовочных файлов, пишут .h в языке С.  
 
 
using namespace std; // программа использует пространство имен(namespace) std // Ключевое слово using в переводе с английского означает "используется". Классы cout и cin используемые дальше  объявлены в пространстве имен std и включены в программу посредством заголовочного файла  iostream
 
 
 // Класс, представляющий из себя массив чисел типа int. По другому подобные классы называются  последовательными контейнерами и реализованы в стандартной библиотеке как vector. 
 
class massiv {public: // объявление класса с названием massiv. все элементы класса являются public то есть доступными для всех
int n, *S; // переменные-члены класса. Тип int 4-байтовый (32битный). Указатель любого типа является 4 байтовым. Указатели очень важно инициализировать - я сам постоянно забываю инициализировать указатели. Переменная n - размер массива, S - сам массив. 
massiv (int =5); // конструктор класса. Конструктор это специальная функция, которая вызывается при создании экземпляра класса. Экземпляр класса создается в момент выделения памяти. 5 это значение, которым инициализируется параметр, по умолчанию
void vvod(); // функция ввода данных на консоль, не возвращающая значений
void vuvod();// функция вывода данных на консоль, не возвращающая значений
int max();// функция выясняющая индекс в массиве максимального элемента,  возвращающая значение типа int
int min();// функция выясняющая индекс в массиве минимального элемента,  возвращающая значение типа int
void sort();// функция сортировки массива, не возвращающая значений
};
 
massiv::massiv (int nn) // конструктор, это функция имя которой совпадает с именем класса. Аргумент - размер массива
{  // начало конструктора
n=nn; // присвоения значения количества элементов
S=new int [n];// выделение памяти. После подобного выделения нужно обязательно освобождать память оператором delete[] S. Если память не освобождена возникнет утечка памяти, и это очень серьезная проблема для крупных программ.
} // конец конструктора
 
void massiv::vvod() // ввод данных на консоль
{ // начало vvod()
 
// вывод строки на консоль
    cout << "Введите количество элементов массива: ";
 
// cout является стандартным классом вывода. << является переопределенным в классе cout оператором. Оператор это функция и можно переписать строчку примерно так    cout.operator<<("Введите количество элементов массива: "); // "Введите количество элементов массива: "  - это константный char массив. Инструкция должна завершаться точкой с запятой. Аккуратно - можно опечататься и заменить на : а компилятор выдаст ошибку.
 
 
 
// запрос количества элементов массива
    cin >> n;
 
// cin является стандартным классом ввода.  >> является переопределенным в классе оператором. По другому то же самое можно записать следующим образом cin.operator>>(n); где n это аргумент оператора
 
// Количество выделенной памяти под массив и n в данной программе не согласованы. То есть S=new int [n]; нужно вызвать здесь, предварительно освободив память выделенную в конструктора  операцией delete []S;
 
 
// запрос элементов массива
    for (int i = 0; i < n;i++) 
    {
        cout<<"\n S["<<i<<"]=";
        cin>>S[i];
    }
 
// цикл for это последовательность повторных исполнений инструкций внутри { }. Можно переписать без for по другому:
// cout<<"\n S["<<0<<"]="; cin>>S[0];
// cout<<"\n S["<<1<<"]="; cin>>S[1];
//...
// cout<<"\n S["<<n-1<<"]="; cin>>S[n-1];
// Для компактности подобной записи создан циклический оператор
 
// int i это объявление переменной-счетчика. Область видимости переменной только один цикл. Вне цикла использовать эту переменную нельзя. Но можно создать переменную с тем же именем. 
// i = 0 инициализация переменной, ей присваивается значение 0. = это операция присвоения значения.
// i < n  условие при котором выполняются заключенные в {} инструкции
// i++ постфиксная форма инкрементного увеличение переменной на единицу. Эквивалетно i = i + 1
// \n это escape-последовательность обозначающая переход каретки на новую строку. По другому пишется как endl
 
} // конец vvod()
 
void massiv::vuvod() // вывод данных на консоль
{ // начало vuvod()
    for (int i=0;i<n;i++)
        cout<<"\t"<<S[i]; // \t это escape-последовательность обозначающая табулирование
 
    cout<<endl; // перевести каретку на новую строку
} // конец vuvod()
 
int massiv::max () // выяснение индекса максимального элемента
{ // начало max
    int i; // объявление переменной счетчика цикла с именем i. Переменная не инициализирована. Перед использованием переменные должны быть проинициализированы.
    int N=0;  // объявление переменной индекса массива  с именем N. Переменная инициализирована 0
    for (i=0;i<n;i++) // цикличное изменение счетчика массива
        if (S[N]<S[i]) // сравнение двух элементов массива и сохранение индекса элемента в массиве
            N=i; // если S[N]<S[i] то  N=i;
    return (N); // возвращение значения
} // конец max
 
 
int massiv::min () // выяснение индекса  минимального элемента
{ // начало min
    int i; // счетчик
    int N=0; // индекс массива
    for (i=0;i<n;i++)// цикличное изменение счетчика массива
        if (S[N]>S[i]) // сравнение двух элементов
            N=i; // сохранение индекса элемента в массиве
    return (N); // возвращение значения из функции
} // конец min
 
void massiv::sort() // сортировка массива по убыванию ( пузырьковая)
{ // начало sort
    int N,k,buf; // N - индекс в массиве, i - счетчик, buf это переменная для того, чтобы обменять значения массива между собой
    for (int i=0;i<n-1;i++) // цикличное изменение счетчика массива
    {
        N=i; // присвоили индексу массива значение i
        for (k=i+1;k<n;k++) // цикличное изменение счетчика массива. 
 
//Чтобы отсортировать массив пузырьковым методом  нужно каждый элемент сравнить со всеми остальными  и переставить на i место kый элемент если выполняется условие  S[k]>S[i]
 
        if (S[k]>S[N]) N=k; // присвоили индексу массива значение k
 
// обмен значений двух элементов массива
        buf=S[i]; // сохранение  S[i] так как следующим оператором данные в этой переменной будут затерты
        S[i]=S[N]; // изменили S[i]
        S[N]=buf; // присвоили S[N] старое значение S[i]
        
    }
} // конец sort
 
void main() // функция main является точкой входа в программу. Функция не возвращает значений.
{ // начало main
    setlocale (LC_CTYPE,"rus"); // установка русской локали, LC_CTYPE численная константа ( объявленная в заголовочном файле), которая обозначает изменение способа обработки символов на консоли, "rus" это имя локали
    massiv S; // объявление переменной класса массив с вызовом конструктора и  выделением памяти под 5 элементов.
    S.vvod();  // вызов метода класса. Точка это операция доступа к членам класса.
    cout<<"Максимальный элемент равен "<<S.S[S.max()]<<", его индекс: " <<S.max()<<endl;
    cout<<"Минимальный элемент равен "<<S.S[S.min()]<<", его индекс: "<<S.min()<<endl;
    cout<<"Отсортированный массив:"<<endl;
    S.sort(); // сортировка массива
    S.vuvod(); // вывод массива
    system ("PAUSE"); // так делается, чтобы окно консоли не исчезло после выполнения. system исполняет команды shell. Shell в ОС Windows это cmd.exe
} // конец main
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
01.06.2012, 12:46     Прокомментировать код #3
Цитата Сообщение от asidorchenko Посмотреть сообщение
Указатель любого типа является 4 байтовым.
Только на 32-х битных системах, в 64-х битных указатель занимают 64 бита, а int также 32.

Добавлено через 5 минут
Цитата Сообщение от asidorchenko Посмотреть сообщение
n=nn; // присвоения значения количества элементов
S=new int [n]
надо всегда проверять успешность выделения, а размер должен быть unsigned:
C++
1
2
3
4
5
6
7
8
9
10
11
12
massiv::massiv (unsigned int n)
{
 s=new [n];// Здесь n - параметр, он перекрывает член с именем n
 if (S!=NULL) // или if (S!=null_ptr), если компилятор понимает null_ptr
 {
   this->n=n; // this->n - член данного экземпляра, имеющий имя n. Это полная форма его адресации и она не перекрывается. просто n - параметр
 }
 else
 {
   n=0;
 }
}
Добавлено через 1 минуту
Цитата Сообщение от asidorchenko Посмотреть сообщение
int n, *S;
так как n - размер, то надо так:

C++
1
2
3
4
class massiv {public:
 int *S;
 unsigned int n;
 ...
Добавлено через 1 минуту
Цитата Сообщение от Михаил Кричук Посмотреть сообщение
int max();
int min();
индексы должны быть unsigned:
C++
1
2
unsigned int max();
unsigned int min();
Добавлено через 1 минуту
Цитата Сообщение от Михаил Кричук Посмотреть сообщение
cout<<"Введите количество элементов массива: ";
* * cin>>n;
* * for (int i=0;i<n;i++)
* * {
* * * * cout<<"\n S["<<i<<"]=";
* * * * cin>>S[i];
* * }
i - тоже индекс. Поэтому тоже unsigned int i, а не int i.

Добавлено через 48 секунд
unsigned избавляет от проверки факта не отрицательности размера и выяснения того, как new реагирует на отрицательные числа.

Добавлено через 2 минуты
А для гигантских массивов все индексы и размеры только size_t, это тоже unsigned int, но с разрядностью, гарантированно равной разрядности адреса и указателя, что позволяет запихать туда любой возможный индекс, или размер.

Добавлено через 49 секунд
Цитата Сообщение от asidorchenko Посмотреть сообщение
for (int i = 0; i < n;i++)
и здесь i - индекс. unsigned int.

Добавлено через 4 минуты
Цитата Сообщение от asidorchenko Посмотреть сообщение
int massiv::max () // выяснение индекса максимального элемента
{ // начало max
* * int i; // объявление переменной счетчика цикла с именем i. Переменная не инициализирована. Перед использованием переменные должны быть проинициализированы.
* * int N=0; *// объявление переменной индекса массива *с именем N. Переменная инициализирована 0
* * for (i=0;i<n;i++) // цикличное изменение счетчика массива
* * * * if (S[N]<S[i]) // сравнение двух элементов массива и сохранение индекса элемента в массиве
* * * * * * N=i; // если S[N]<S[i] то *N=i;
* * return (N); // возвращение значения
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
unsigned int massiv::max()
{
 unsigned int i;
 unsigned int N=0;
 for (i=0; i<=n; --i)
 {
  if (S[N]<S[i])
  {
   N=i;
  }
 }
 return N;
}
ну и минимум
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
unsigned int massiv::min()
{
 unsigned int i;
 unsigned int N=0;
 for (i=0; i<=n; --i)
 {
  if (S[N]>S[i])
  {
   N=i;
  }
 }
 return N;
}
Добавлено через 4 минуты
Если уж охота юзать знаковые индексы, то их разрядность должна быть ещё больше, чем размера и только в самих циклах, возвращать надо всё равно unsigned int. Возможное исключение - отрицательные значения в качестве кодов ошибок, но и это не лучшее решение, и в этом случае действует то же правило о разрядности. Если размер проверяется, то разрядность индексов должна быть больше, чем количество бит, необходимых для хранения максимального размера.

Добавлено через 1 минуту
Пользователь может ввести что попало и всё, что он вводит, подлежит или проверкам на допустимость, или защитам на уровне типа.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.06.2012, 14:38     Прокомментировать код #4
Цитата Сообщение от taras atavin Посмотреть сообщение
размер должен быть unsigned
Не должен.
Цитата Сообщение от taras atavin Посмотреть сообщение
s=new [n]
Компиляторы до того дошли, что и тип теперь импортируют из головы программиста?
Цитата Сообщение от taras atavin Посмотреть сообщение
if (S!=NULL)
До этого не дойдёт, new кидает исключение в случае неудачной попытки выделения памяти.
Цитата Сообщение от taras atavin Посмотреть сообщение
null_ptr
C++
1
nullptr
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2012, 15:03     Прокомментировать код #5
Цитата Сообщение от silent_1991 Посмотреть сообщение
Не должен.
ну ка объясни, как он может быть отрицательным.

Добавлено через 39 секунд
Цитата Сообщение от silent_1991 Посмотреть сообщение
Компиляторы до того дошли, что и тип теперь импортируют из головы программиста?
Согласен.
C++
1
S=new int [n];
Добавлено через 1 минуту
Цитата Сообщение от silent_1991 Посмотреть сообщение
До этого не дойдёт, new кидает исключение в случае неудачной попытки выделения памяти.
исключение грозит фатальной гогой, от которой по идее должно было защитить, если кто нибудь, наслушавшись тебя про исключение, не поставит такую проверку. Лучше уж найти старый компилятор, который этого не делает и обработать самому. Ас, знакомый с исключениями, кстати, не будет спрашивать примитивнейший комменты. Но даже если бы ТС им был, сам механизм исключений = накладной навесок, от которого по идеологии полагается избавляться везде, где он не нужен.

Добавлено через 7 минут
И эйси, пусть он и так нужен. Но обработки исключений я там тоже не увидел.

Добавлено через 1 минуту
Цитата Сообщение от silent_1991 Посмотреть сообщение
nullptr
А что, уже стандартизировали? Вроде ж написание было не устоявшимся где null_ptr, где NULLPTR, а где и nullptr.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.06.2012, 15:09     Прокомментировать код #6
Цитата Сообщение от taras atavin Посмотреть сообщение
ну ка объясни, как он может быть отрицательным
А кто говорил, что он может быть отрицательным?
Цитата Сообщение от taras atavin Посмотреть сообщение
если кто нибудь, наслушавшись тебя про исключение, не поставит такую проверку
Самдурак.
Цитата Сообщение от taras atavin Посмотреть сообщение
Лучше уж найти старый компилятор, который этого не делает и обработать самому.
Да вы гланды любите удалять через одно место...
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <new>
 
int main()
{
    double *ptr = new (std::nothrow_t()) double [1000000000];
    
    if (ptr == nullptr)
        std::cout << "OMG" << std::endl;
    
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
А что, уже стандартизировали?
Да уж почти год как стандарт принят.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2012, 15:13     Прокомментировать код #7
Цитата Сообщение от silent_1991 Посмотреть сообщение
А кто говорил, что он может быть отрицательным?
Читай:
Цитата Сообщение от silent_1991 Посмотреть сообщение
Не должен.
, а единственная альтернатива -
C++
1
signed
, что и значит "может быть отрицательным".
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.06.2012, 15:16     Прокомментировать код #8
Цитата Сообщение от taras atavin Посмотреть сообщение
Ас, знакомый с исключениями, кстати, не будет спрашивать примитивнейший комменты
Не будет. Но в том виде, в котором вы представили код, до if'а не дойдёт всё равно.
Цитата Сообщение от taras atavin Посмотреть сообщение
от которого по идеологии полагается избавляться везде, где он не нужен.
Точно. Только вот нехватка памяти - фатальная ошибка, от которой зависит работоспособность всей программы, и она не подпадает под понятие "здесь исключения не нужны".

Добавлено через 1 минуту
taras atavin, вы написали, что индексы и размеры должны быть отрицательными. "Должны" означает "без вариантов должны". Я же настаиваю на том, что они не должны быть беззнаковыми.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2012, 15:21     Прокомментировать код #9
Уж если так хочется ислюкакой, то
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
massiv::massiv (unsigned int n)
{
 try
 {
  S=new int [n];
  this->n=n; // this->n - член данного экземпляра, имеющий имя n. Это полная форма его адресации и она не перекрывается. просто n - параметр
 }
 catch(bad_alloc)
 {
   S=nullptr;
   this->n=0; 
 }
}
Добавлено через 1 минуту
Цитата Сообщение от silent_1991 Посмотреть сообщение
taras atavin, вы написали, что индексы и размеры должны быть отрицательными.
не отрицательными, unsigned - это беззнаковый, то есть должен быть неотрицательным. signed - знаковый, то есть может быть отрицательным.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.06.2012, 15:23     Прокомментировать код #10
Цитата Сообщение от taras atavin Посмотреть сообщение
не отрицательными
Ошибся, хотел написать "беззнаковыми".
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2012, 15:23     Прокомментировать код #11
Цитата Сообщение от silent_1991 Посмотреть сообщение
Точно. Только вот нехватка памяти - фатальная ошибка, от которой зависит работоспособность всей программы, и она не подпадает под понятие "здесь исключения не нужны".
памяти может нехватать временно, тогда можно дождаться освобождения её из под чего то другого и повторить попытку, только уже ресайзом, а из-за исклюкаки программа просто свалится, ничего не сказав.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.06.2012, 15:25     Прокомментировать код #12
Цитата Сообщение от taras atavin Посмотреть сообщение
Уж если так хочется ислюкакой
Я показал, как можно обойтись без исключений, не обременяя себя необходимостью выискивать борланд 3.1.

Добавлено через 50 секунд
Цитата Сообщение от taras atavin Посмотреть сообщение
а из-за исклюкаки программа просто свалится, ничего не сказав
Это если не обрабатывать исключение. Но в этом случае программист, как я уже сказал, "самдурак".
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2012, 15:35     Прокомментировать код #13
Цитата Сообщение от silent_1991 Посмотреть сообщение
Не будет. Но в том виде, в котором вы представили код, до if'а не дойдёт всё равно.
Я дал код не с проста с NULL без ptr, это старый стандрат, когда именно такая исклюкака не существовала и по нему он до проверки ещё доходил. null_ptr я указал, как возможное новшество в комментарии.

Добавлено через 3 минуты
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это если не обрабатывать исключение. Но в этом случае программист, как я уже сказал, "самдурак".
ТС - явный новичок, он ещё не может знать про исклюкаку. И ему ты подсовываешь вместо простого сравнения разглагольствования про то, кого кинет new. Он полезет в исключения, но, скорее всего, так и не разберётся с их кодами.

Добавлено через 4 минуты
Цитата Сообщение от silent_1991 Посмотреть сообщение
Я показал, как можно обойтись без исключений, не обременяя себя необходимостью выискивать борланд 3.1.
года 95-го и с плюсов. Ну ну.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.06.2012, 15:38     Прокомментировать код #14
Цитата Сообщение от taras atavin Посмотреть сообщение
это старый стандрат
Видимо, совсем уж старый, потому что по стандарту 2003 года new также бросал исключение.
Цитата Сообщение от taras atavin Посмотреть сообщение
И ему ты подсовываешь вместо простого сравнения разглагольствования про то, кого кинет new
Вы до сих пор не поняли, что с большой вероятностью ваш код у ТСа будет работать не так, как вы предполагали, а выдаст на экран что-то типа
Код
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
и никакой if не поможет.

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
года 95-го и с плюсов. Ну ну.
Ну это же вы предложили поискать компилятор постарее, который про исключения в new не ведает.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2012, 20:26     Прокомментировать код #15
Но плюсовый, а не чисто сёвый и не старше некуда.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
03.06.2012, 00:23     Прокомментировать код #16
taras atavin, в любом случае, существует решение, не сопряжённое с этим неблагодарным делом, и я его продемонстрировал.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.06.2012, 09:56     Прокомментировать код #17
Нужность исключений определяется не фатальностью ошибки, а местами, где гога возникает и где может быть обработана: если на гогу должна реагировать та же функция, в которой она возникает, то исключения только бестолку увеличивают сложность и на ровном месте плодят коды, а если обработка гоги на десяток вызовов выше места её возникновения, тогда исключения - единственный возможный выход. Если же гога фатальна, то надо бросать не исключение, а abort, или exit и завершать прогу и перед этим обычным оператором вывода выводить гогомессагу в лог. Исключения в этом случае тем более не нужны.

Добавлено через 2 часа 39 минут
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это если не обрабатывать исключение. Но в этом случае программист, как я уже сказал, "самдурак".
Не вижу трая с кечем в конструкторе. Да и много ли народу знает про все эти бэдалоки, андэфлои и тому подобную фигню с ниоткуда не вытекающими и больше ни где не участвующими названиями?

Добавлено через 10 минут
Да и что значит "если"? Конструктор и деструктор должно быть мпредельно сложно написать не надёжно. Или это сделано специально для утечек памяти? Чтоб джаванутым и зарешёченным было не обидно?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
05.06.2012, 16:27     Прокомментировать код #18
Цитата Сообщение от taras atavin Посмотреть сообщение
тогда исключения - единственный возможный выход
О чём я и говорю. Но вы со мной почему-то спорите.
Цитата Сообщение от taras atavin Посмотреть сообщение
Да и много ли народу знает про все эти бэдалоки, андэфлои и тому подобную фигню с ниоткуда не вытекающими и больше ни где не участвующими названиями?
Странный вопрос. Выбрасываемые исключения - часть предоставляемого классом интерфейса, и чтобы полноценно пользоваться классом, надо хорошо знать его интерфейс. Используются данные конкретные исключения где-нибудь ещё или нет - не важно.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.06.2012, 17:06     Прокомментировать код #19
new - тоже класс? Однако!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2012, 17:08     Прокомментировать код
Еще ссылки по теме:

C++ Прокомментировать код
C++ Прокомментировать код
Прокомментировать код C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
05.06.2012, 17:08     Прокомментировать код #20
taras atavin, new - даже больше, это инструмент, предоставляемый самим языком. Так что то, как он реагирует на особые ситуации, тем более надо знать.
Yandex
Объявления
05.06.2012, 17:08     Прокомментировать код
Ответ Создать тему
Опции темы

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