Что означает двоеточие в программировании
Перейти к содержимому

Что означает двоеточие в программировании

  • автор:

Для чего нужен оператор двоеточие, если два двоеточия — это оператор расширения области видимости

для чего нужен оператор двоеточие ( : ), если два двоеточия( :: ) — это оператор расширения области видимости.

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Оператор разрешения области видимости
Только начинаю изучать ООП. Объясните где и как применяется оператор разрешения области видимости.

Для чего нужен оператор this?
Здравствуйте. Я совсем новичок. Недавно стал смотреть видео курс на ютубе. Дошел до прототипов.

Для чего нужен оператор throw?
Объясните пожалуйста. А то в интернете найти ничего не могу. P.S. В MDSN непонятно написано.

Для чего нужен оператор lock?
для чего нужен оператор lock? в смысле я уже загуглил — он заставляет код выполняться синхронно, но.

Эксперт С++

13284 / 10599 / 6330
Регистрация: 18.12.2011
Сообщений: 28,293

1 2 3 4 5
struct A { int n; A():n(0){} };

18430 / 9595 / 2347
Регистрация: 30.01.2014
Сообщений: 16,780

Лучший ответ

Сообщение было отмечено Alexei9 как решение

Решение

ЦитатаСообщение от Alexei9 Посмотреть сообщение

оператор двоеточие

В С++ нет такого оператора. Стандарт не дает ему названия, можно считать, что это просто синтаксический разделитель.
Он используется в множестве мест в зависимости от контекста.
Как составная часть тернарного оператора

int c = a  b ? a : b;

Как обозначение начала списка инициализации конструктора

SomeClass() : a(1), b(2) {}

Как разделитель, обозначающий начало списка базовых классов при указании наследования

1 2 3
class SomeClass1 : public BaseClass1 {}; class SomeClass2 : public BaseClass1, public BaseClass2 {};

Как способ указания размерности битового поля

1 2 3 4
struct A { int a : 2; };

Как синтаксис задания типа в enum class (С++11)

1 2 3 4
enum : int { EN1, EN2 };

Как разделитель между for-range-declaration и expression в range-based for(C++11)

for(int & a : vec) { //. 

Добавлено через 24 минуты
Еще два варианта использования забыл упомянуть:
Как окончание спецификатора доступа класса

1 2 3 4 5
class A { public: void func(); };

Как окончание декларации метки для goto

1 2 3 4 5
goto mylabel; ///. mylabel: func();

Или меток в конструкции switch — case

1 2 3 4 5 6 7 8
switch(a) { case 1: //. break; default: ; };

Регистрация: 05.06.2015
Сообщений: 4
Регистрация: 05.06.2015
Сообщений: 4
в чем разница между : (двоеточие) и :: (двойное двоеточие) в языке С++
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1

Примерно такая же, как между ‘Государем’ и ‘милостивым государем’.

‘:’ — это разделитель (после метки, в тернарном операторе, в структуре итд.).
‘::’ — оператор области видимости.

2441 / 1839 / 406
Регистрация: 15.12.2013
Сообщений: 8,223

Alexei9, неужели здесь вам ответили не достаточно подробно?
https://www.cyberforum.ru/post7721283.html

Регистрация: 05.06.2015
Сообщений: 4
преподавателю этого не хватило.
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
Alexei9, Преподаватель по танцам?

Эксперт CАвтор FAQ

21275 / 8292 / 637
Регистрация: 30.03.2009
Сообщений: 22,656
Записей в блоге: 30

У оператора :: не было какой-то самоцели взять что-то и написать два раза подряд. Просто разделители (знаки типа точка, запятая, точка с запятой и т.п.) давным-давно закончились, вот и приходится разработчикам языка изголяться и переиспользовать один и тот же разделитель в разных синтаксических конструкциях. Т.е. символ один и тот же, но несёт разную смысловую нагрузку и по сути дела можно считать, что это символы «двоеточие номер 1», «двоеточие номер 2» и т.п.

3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1

ЦитатаСообщение от Alexei9 Посмотреть сообщение

не хватило
DrOffset дал исчерпывающий ответ.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Нюансы синтаксиса: для чего нужен оператор ->
Здравствуйте совсем недавно столкнулся с вот таким вот оператором. -> . Подскажите пожалуйста, что.

Для чего нужен оператор using и в каких случаях он необходим?
Несколько раз сталкивался в C# с оператором using. Но не могу понять для чего он нужен. Сейчас.

Для чего нужен пустой оператор writeln в массивах?
для чего нужен пустой оператор writeln в массивах?

Для чего нужен оператор разрешения контекста (scope resolution operator)?
Объясните простым языком для чего нужен оператор " :: " , и какого он вида?

Зачем нужен оператор while (именно while, а не do-while), когда есть оператор for?
Четкий и понятный ответ в литературе и на других web ресурсах не найден, поэтому вопрос к знатокам.

Условный оператор и оператор выбора. Даны два угла треугольника. Определить, существует ли такой треугольник
Даны два угла треугольника (в градусах). Определить, существует ли такой треугольник, и если да, то.

QBASICBOOK.ru: сайт про QB64

Не стоит относиться к программированию, по крайней мере, к прикладному программированию, как к чему-то сложному и подвластному людям с «особым» складом ума. С основами программирования человек сталкивается повседневно, и даже не хочется приводить примеры, поскольку все это банально.

Программирование на компьютере с использованием языка программированияэто всего лишь формализованное общение с вычислительной техникой. Цель такого общения – объяснить ей, чего вы от нее хотите и добиться и получить адекватный результат. Необходимо объяснить четко, с соблюдением логики и здравого смысла. Что ж, попробуем в этом разобраться!

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

Рисунок 1 – Пример работы с двоеточием

Рисунок 1 – Пример работы с двоеточием

В этом операторе, зачастую, нет особой необходимости, но если встретите его, просто знайте, что имеется в виду.

Немного поясню этот код. A, B – это имена переменных, то есть какие-то именованные ячейки в памяти. 2, 4 – это значения которые мы помещаем в эти ячейки памяти. Оператор присваивания (=) помогает нам в этом. Со всем этим мы познакомимся подробнее чуть позже. Здесь главное, что по сути у нас есть два выражения. Первое: A = 2, второе B = 4. Эти два выражения записаны в одну строку. Таким образом, при помощи двоеточия можно записать 2 и более выражений в одну строку.

В этой статье мне бы хотелось напомнить о том, как расшифровывается аббревиатура B.A.S.I.C.: Beginner’s All-purpose Symbolic Instruction Code – универсальный язык символических инструкций для начинающих.

На этом языке в последующих статьях мы будем писать наши первые алгоритмы. Что же это такое?

Алгоритм – это последовательность действий, приводящих к намеченному результату.

Алгоритм может быть представлен в обычной словесной форме в виде последовательности пронумерованных предложений.

Алгоритмы бывают трех видов:

  • Линейный алгоритм – это такой алгоритм, в котором действия выполняются последовательно, в порядке расположения блоков;
  • Разветвляющийся алгоритм, в отличие от линейного, содержит блок разветвления (или условия). В зависимости от выполнения условия выбирается один из двух (или более) различных вариантов вычислительного процесса. Затем вычислительный процесс опять сводится в одно русло. Для программирования разветвлений используются операторы условного и безусловного перехода;
  • Циклическим алгоритмом называется алгоритм, часть которого выполняется многократно с различными значениями изменяющейся по определенному закону переменной (переменной цикла). Многократно повторяющаяся часть алгоритма, внутри которой переменная цикла не изменяется, называется телом цикла.

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

Спасибо за прочтение этой статьи.

Что означает двоеточие в программировании

В С++ есть такое понятие как область видимости класса. Вообще в С++ есть понятие областей видимости и вот среди них одна из областей видимости — это область видимости класса.

  • Локальная область видимости — видимость только внутри блока
  • Глобальная область видимости — видимость на уровне файла
  • Область видимости класса — видимость только внутри класса, но не за его пределами

Область видимости класса применима к именам, определенным в классе, таким как имена данных-членов и функций-членов класса. Существование такой области видимости позволяет удобно использовать одни и те же названия для функций или переменных внутри разных классов.

Вне класса и вне функций класса для доступа к элементам, сокрытым областью видимости класса, в зависимости от ситуации применяют операции:

Прямая операция членства
Косвенная операция членства
Операция разрешения контекста

Какая из операций используется зависит от контекста, в котором используется название класса. Самый простой и понятный вариант — использование операции «точка». Используем объект и с помощью точки делаем запрос на какую-то часть класса, будь то функция или переменная, открытая классом.

//Листинг #1 Использование точки как операции доступа к элементу класса
using std : : cout ;
class MyClass < int x ; //Переменная открыта классом, но сокрыта областью видимости класса void show ( ) < cout < < "hello\n" ; >//функция открыта классом, но сокрыта областью видимости класса
MyClass student ;
student . x = 100 ; //ипользовали запрос с помощью точки
cout < < student . x < < '\n' ; student . show ( ) ; //ипользовали запрос с помощью точки

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

Чуть сложнее дело обстоит со стрелкой. Сколько бы лет ни прошло, всегда будут новички, которым стрелка окажется неясной. Конечно, если объяснить, то всё ясно, но как-то так вышло, что сначала люди не понимают указатели, потом не понимают операцию -> . Эта операция выполняет ту же роль, что точка, но предназначена для облегчения восприятия кода. Когда используются указатели, хочешь или не хочешь, но в С++ код становится сложным для восприятия, и этот момент в случае с объектами был немного упрощён:

//Листинг #2 Использование стрелки как операции доступа к элементу класса
using std : : cout ;
class MyClass < int x ; //Переменная открыта классом, но сокрыта областью видимости класса void show ( ) < cout < < "hello\n" ; >//функция открыта классом, но сокрыта областью видимости класса
MyClass * student = new MyClass ;
student — > x = 100 ; //<---- Так просто проще, чем через точку delete student ; MyClass * ptr = new MyClass ; ( * ptr ) . x = 100 ; //<--- а так обычно запутываешься delete ptr ; //Оба варианта одно и то же

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

//Листинг #3 Использование точки как операции доступа к элементу класса
using std : : cout ;
class MyClass < int * x ; //Переменная открыта классом, но сокрыта областью видимости класса void show ( ) < cout < < "hello\n" ; >//функция открыта классом, но сокрыта областью видимости класса
/*с помощью конструктора выделяем память внутреннему для класса указателю*/
x = new int ;
/*с помощью деструктора зачищаем память от внутреннего для класса указателя*/
MyClass student ;
* student . x = 100 ; //Точка используется к разыменованному объекту (*student).x
cout < < * student . x < < '\n' ;

В общем, стрелка обычно используется, если на объект указывает указатель, а точка если объект сам по себе.

Операция двойного двоеточия называется операцией разрешения области видимости не просто так. Прежде всего двойное двоеточие является уточнением. Фактически двойное двоеточие расширяет область видимости компилятору для поиска названий. Если говорить о классах, то такую использовать можно для выносимых за класс данных класса. Это помогает избежать неоднозначности в случае использования нескольких классов, внутри которых могут оказаться одни и те же названия. Двойным двоеточием уточняется принадлежность элемента к классу и компилятор не затруднён в выборе правильного класса. Кроме этого, в классе двойное двоеточие может применяться к статической переменной класса. По большому счёту статическая переменная класса является глобальной переменной, но прикрытой областью видимости класса. Поскольку статическая переменная класса глобальная, ей не имеет значения, построен объект или не построен и она не зависит от объектов класса. Если обычные переменные внутри класса могут использоваться как независимые переменные независимыми объектами такого класса, то статическая переменная класса привязана ко всем объектам класса.

Двоеточие в конструкторе, что это?

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

String::String( const char *s):length( ( s != 0) ? strlen(2) : 0){/*. */}

Поиском по форуму не нашел, если было — прошу понять, простить (с)
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Двоеточие в конструкторе
class A < public: A(): >; Что означает двоеточие и что туда надо писать?

Поясните пожалуйста что означает двоеточие и то что идет после него
В 4 строчке после параметра в скобочках нету ";" или же тела функции, что не сходится с моим.

Что это за знак >> прочитал что это сдвиг вправо? что он делает
int d=6, c=5,f; f = d >> c; cout<< f; вывод 0

Эксперт С++

8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
Drus, Cписок инициализации.
Регистрация: 07.10.2011
Сообщений: 203

Нашел темы, почитал. Возникла каша в голове.

Это список, в котором через запятую перечислены пары из имени члена класса и значения, которое необходимо ему присвоить, взятого в скобки (с)

Вот какой вопрос гложет: а есть ли разница инициализации списком и инициализации в теле конструктора, и какой вариант предпочтительнее?

Эксперт С++

8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

Drus, Через список инициализация происходит шустрее. + к тому константные данные можно инициализировать только через список.

Регистрация: 07.10.2011
Сообщений: 203
спасибо огромное!

Эксперт С++

8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

Так же базовые классы инициализируются только через список.

794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1

ЦитатаСообщение от Drus Посмотреть сообщение

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

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

Эксперт С++

6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1

ЦитатаСообщение от ForEveR Посмотреть сообщение

Через список инициализация происходит шустрее

думаю что слово «шустрее» неуместно, список инициализации просто инициализирует перед тем как войти в тело конструктора

Регистрация: 07.10.2011
Сообщений: 203

ЦитатаСообщение от talis Посмотреть сообщение

параметры конструктора этого члена

сильно помогло в осознании, спс. Сразу как-то не совместил что инициализация и есть конструктор, вот и не понимал смысла

794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
Почитайте про

ЦитатаСообщение от ForEveR Посмотреть сообщение

Захват Ресурса Есть Инициализация (RAII)
Заблокирован

ЦитатаСообщение от Jupiter Посмотреть сообщение

думаю что слово «шустрее» неуместно, список инициализации просто инициализирует перед тем как войти в тело конструктора

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
class CBase { int a; public: CBase(): a(0) { std::cout"Запущен конструктор по умолчанию CBase\n"; } public: CBase(const int nA): a(nA) { std::cout"Запущен конструктор с параметром CBase\n"; } public: CBase& operator=(const int nA){ a=nA; std::cout"Запущен operator= CBase\n"; return *this; } }; class CTest { CBase val; public: CTest(): val(100) { std::cout"Запущен конструктор CTest\n"; } }; class CTest2 { CBase val; public: CTest2() { std::cout"Запущен конструктор CTest2\n"; val=100; } }; class CTest3 { CBase& val; public: CTest3(CBase& nVal) : val(nVal) //по другому не компилирует { std::cout"Запущен конструктор CTest3\n"; //val=nVal; //не позволяет сделать вот так } }; int main (void) { CTest myTest1; CTest2 myTest2; //обратите внимание, что здесь имеет место двойная инициализация. //Создание объекта конструктором по умолчанию, а потом настройка //его данных членов с помощью оператора= CBase temp; CTest3 myTest3(temp ); return 0; }

Тест1 и тест2 наглядно демонстрируют, что инициализация агрегата через инициализацию его агрегированных данных выполняется шустрее, потому что использует минус одно действие.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *