С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Gouvere
19 / 19 / 3
Регистрация: 25.11.2013
Сообщений: 122
#1

Какие соглашения действуют в C++? - C++

09.08.2014, 15:37. Просмотров 1152. Ответов 29
Метки нет (Все метки)

Например, в PHP следующие соглашения наименования:
  • Имена классов с большой буквы (SomeClass)
  • Имена переменных с маленькой буквы (some_var)
  • Имена функций с маленькой буквы (someFunction)

А какие соглашения действуют в C++?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2014, 15:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Какие соглашения действуют в C++? (C++):

Имя соглашения о вызове функции - C++
Заметил, что имена соглашении о вызове функции можно писать разными способами(дописывать лишнее подчеркивание). Есть ли какое-нибудь...

Почему операторы инкремента действуют по разному для стандартных и нестандартных типов? - C++
class my { int i; public: my(int in) :i(in) {} operator int () { return i; } int operator=(int...

Спрашивается, каков будет счет в конце игры, если оба игрока действуют оптимально. - C++
Помогите пожалуйста написать 2 задачи, ребят (( Спасибо вам большое. Нужно завтра сдать, помгите пожалуйста. Буду очень признательна вам ...

Определить, какие из этих имен встречаются во всех классах, какие есть хотя бы в двух классах, и какие - только в одном классе - C++
Для каждого из четырех классов указаны имена девочек, обучающихся в них. Определить, какие из этих имен встречаются во всех классах, какие...

Надо проверить какие квадраты влезли в круг а какие нет - C++
Есть круг с центром в a = 150, b = 150 радиус R*R = 1800, стороны квадратов 10. Координаты нижнего левого угла квадрата с...

Узнать, какие разряды включены в число, а какие нет - C++
Помогите разобраться.Это все надо на Си. Значение int 4 байта т.е 32 бита.Пусть есть число 10(хотя в проге число зарание не известно!!)...

29
0x10
2486 / 1661 / 249
Регистрация: 24.11.2012
Сообщений: 4,136
10.08.2014, 07:04 #16
Цитата Сообщение от gru74ik Посмотреть сообщение
Чего там может "пойти не так"?
У начинающих и в 30 строках могут начаться проблемы. Пример с using namespace - Глобальные переменные
Если же все идет хорошо, то продолжают на автомате лепить эти директивы везде, в том числе в заголовочные файлы, рано или поздно наступая на грабли.
0
Gouvere
19 / 19 / 3
Регистрация: 25.11.2013
Сообщений: 122
10.08.2014, 07:58  [ТС] #17
Mr.X, я понимаю, что при использовании using namespace могут возникнуть конфликты имен. Но когда я выбираю из пространства лишь тройку имен, при этом запоминая, что эти имена уже заняты, ничего страшного здесь нет. Это же лучше чем каждый раз писать std:
C++
1
std::cout << "Hello" << std::endl;
или
C++
1
cout << "Hello" << endl;
Конечно, это не всегда правильно, но выбирать часто используемые имена - в этом нет ничего плохого.

Или же я чего-то не понимаю?
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
10.08.2014, 08:06 #18
Цитата Сообщение от Gouvere Посмотреть сообщение
Это же лучше чем каждый раз писать std:
std::cout << "Hello" << std::endl;
или
cout << "Hello" << endl;
А чем лучше?
0
0x10
2486 / 1661 / 249
Регистрация: 24.11.2012
Сообщений: 4,136
10.08.2014, 08:24 #19
Цитата Сообщение от Gouvere Посмотреть сообщение
Или же я чего-то не понимаю?
До тех пор пока ты приводишь примеры из стандартной библиотеки, все кажется простым и понятным - частоиспользуемые имена легко запомнить.
Проблемы начинаются с чтением более крупных проектов, где есть N своих пространств имен. Встречая идентификатор без префикса, первая же мысль - определение локально. И становится большим сюрпризом, если фактически оно из какой-то другой библиотеки, которая в своем заголовочном файле добавляет имя в глобальную область.
2
Gouvere
19 / 19 / 3
Регистрация: 25.11.2013
Сообщений: 122
10.08.2014, 08:40  [ТС] #20
Mr.X, меньше кода и выглядит красивее)
0
gru74ik
Эксперт CЭксперт С++
4207 / 1853 / 198
Регистрация: 20.02.2013
Сообщений: 4,992
Записей в блоге: 22
10.08.2014, 09:18 #21
Цитата Сообщение от 0x10 Посмотреть сообщение
У начинающих и в 30 строках могут начаться проблемы. Пример с using namespace - Глобальные переменные
Вы можете привести пример с подобными проблемами при использовании
C++
1
2
3
using std::cout;
using std::cin;
using std::endl;
?
Чтобы тоже был один файл на 30-40 строк, никакой раздельной компиляции, никаких собственных нэймспейсов, и тут бах - на тебе, новичок вдруг решил свой си-аут или эндл в коде зафигачить?
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
10.08.2014, 09:27 #22
Цитата Сообщение от gru74ik Посмотреть сообщение
Вы можете привести пример с подобными проблемами при использовании
Код C++
1
2
3
using std::cout;
using std::cin;
using std::endl;
?
Чтобы тоже был один файл на 30-40 строк, никакой раздельной компиляции, никаких собственных нэймспейсов, и тут бах - на тебе, новичок вдруг решил свой си-аут или эндл в коде зафигачить?
Вот как раз новичок запросто это отчебучит, забыв, что только что заюзал std-шный. Достаточно попытаться соорудить свой графический редактор, где декларировать endl, как int и понимать его, как номер последней строки. И заготовка этого редактора ещё не функциональная может весить всего 10 строк, а проблемы уже будут.
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
10.08.2014, 09:29 #23
Цитата Сообщение от Gouvere Посмотреть сообщение
Mr.X, меньше кода и выглядит красивее)
Ну, мне кажется, что если вещи вредные, ненужные и бессмысленные делаются даже из благих побуждений, то от этого они не перестают быть вредными, ненужными и бессмысленными.
Вообще-то причин применения этих юзингов, по моему мнению, на самом деле три:
1) После выпуска стандарта 1997 года так стали писать люди, привыкшие к прежнему написанию без пространств имен.
2) Подражание примерам в книгах, где авторы делают это для экономии букв, а точнее по причине 1, а точнее из глупости. Вменяемые авторы, кстати, так не делают.
3) Психологи говорят, что незнакомые слова вызывают у людей страх, поэтому люди, не знающие что такое пространства имен и для чего они нужны, пытаются писать код так, чтобы совсем о них забыть. А ведь пространства имен - это модули. Т.е. вы используете в своем модуле переменную, объявленную в другом модуле, а делаете вид, что она объявлена в вашем, чем вводите читателя программы в заблуждение. А по современным представлениям ясность и удобочитаемость программы важнее даже ее быстродействия и экономии памяти, а уж тем более каких-то тараканов в голове у программиста.
0
0x10
2486 / 1661 / 249
Регистрация: 24.11.2012
Сообщений: 4,136
10.08.2014, 09:35 #24
gru74ik, конкретно с using на 30 строках примера не придумаю. Поэтому в том же посте ниже и была приписка - чтобы не привыкали. На малых объемах кода многое можно делать, так что далее "против" можно выдвигать, наверное, только субъективные причины, которые мне формулировать лень, потому что на них найдутся точно такие же субъективные контраргументы "а мне нормально".

Добавлено через 6 минут
Mr.X, ну это все субъективные причины. Есть же вполне конкретный пример использования using, правда в другом контексте:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
struct Base {
  void f() {
    std::cout << "Base::f()" << std::endl;
  } 
};
 
struct Derived : Base {
  // Предотвращает сокрытие метода f();
  using Base::f;
  
  void f(double) {
    std::cout << "Derived::f(double)" << std::endl;
  }
};
 
int main() {
  Derived d;
  d.f();
  return 0;
}
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
10.08.2014, 09:39 #25
Или
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
#include "string"
using std::cout;
using std::cin;
using std::endl;
int endl;
float beginx;
float endx;
int main()
{
 float x;
 float h;
 float y;
 int l;
 cin>>beginx;
 cin>>endl;
 cin>>endx;
 h=(enld-)/(float)endl;
 for (x=beginx, l=0; l<enld; ++l, x+=h)
 {
  y=x*x;
  cout<<"x="<<x<<", f(x)="<<y<<enld;  
 }
 return 0;
}
Добавлено через 1 минуту
24 строки, прога была бы функциональна, если избавиться от юзенов и каждый раз ставить двойное двоеточие, проблема есть и прога уровня не новичка в разработке текстовых редакторов, а новичка вообще в программировании.
0
gru74ik
Эксперт CЭксперт С++
4207 / 1853 / 198
Регистрация: 20.02.2013
Сообщений: 4,992
Записей в блоге: 22
10.08.2014, 09:42 #26
Mr.X, 0x10, возражения и замечания приняты. Благодрю за критику.
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
10.08.2014, 09:45 #27
Кроме того, нельзя вводить, тем более рекомендовать к использованию языковую возможность, которую смогут использовать только новички, а став опытным программистом надо будет переучиваться из-за того, что привычное вызывает какие то проблемы: именно так [цензура]кодеры и получаются. Одно дело, если особенность языка помогает его изучать новичкам и нейтральна для профессионалов и совсем другое, когда она профессионалами не применима. Применять то они её будут в любом случае, но извратят код и завалят проблему костылями вместо того, чтоб писать правильно.
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
10.08.2014, 09:51 #28
Цитата Сообщение от 0x10 Посмотреть сообщение
Mr.X, ну это все субъективные причины.
Ну так я описывал причины применения без причины.
0
0x10
10.08.2014, 09:58
  #29

Не по теме:

Цитата Сообщение от Mr.X Посмотреть сообщение
Ну так я описывал причины применения без причины.
Мда, я чет на своей волне.

0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
10.08.2014, 09:59 #30
Цитата Сообщение от taras atavin Посмотреть сообщение
cout<<"x="<<x<<", f(x)="<<y<<enld;
То есть cout<<"x="<<x<<", f(x)="<<y<<endl; Очепятка.
0
10.08.2014, 09:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2014, 09:59
Привет! Вот еще темы с ответами:

Проверить какие круги влезли в круг, а какие нет - C++
Есть круг с центром в a = 145, b = 145 радиус R = 43, радиусы малых кругов 5. Координаты центра нижнего левого круга с индексом...

Выяснить, какие из прямых параллельны, а какие - нет - C++
Помогите пожалуйста с программой в dev c++. Условие: Даны уравнения прямых а1х+b1y=c1, a2x+b2y=c2, a3x+b3y=c3. Выяснить, какие из этих...

Следует дать конкретную постановку, т.е. указать, какие классы должны быть реализованы, какие должны быть в ни - C++
Задание: Перечень классов: квитанция, накладная, документ, чек; Порядок выполнения работы 1. Определить иерархию классов (в...

Не действуют кнопки - MS Access
Всем доброго времени суток! Есть база, написанная средствами аксесса на рабочем компе. Нужно выложить ее на общий диск, чтобы работали...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.