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

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

Войти
Регистрация
Восстановить пароль
 
iwsyhgia
1 / 1 / 0
Регистрация: 11.01.2014
Сообщений: 51
#1

Что означает двоеточие в наследовании конструктора? - C++

03.08.2014, 23:58. Просмотров 589. Ответов 8
Метки нет (Все метки)

При изучении ООП в рамках языка c++ столкнулся с интересной формой обьявления конструктора объекта:
C++
1
classname(int A, int B, int C) : a(A), b(B), c(C) { }
С инициализации полей класса более менее понятно(соответствует int a(A) и т.д). Но откуда взялось двоеточие?
Вопрос в следующем. Используется где еще либо в языке приведенная выше(или похожая) синтаксическая констуркция?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.08.2014, 23:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что означает двоеточие в наследовании конструктора? (C++):

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

Что означает двойное двоеточие в коде - C++
Что в с++ значит вот это ::

Что означает двойное двоеточие в vector<int>::iterator it ? - C++
Никак не могу понять как взаимоувязаны две сущности: контейнеры и итераторы. vector&lt;int&gt;::iterator it; Если бы это было...

При наследовании конструктора string не записывается - C++
Здравствуйте! В лабораторной необходимо наследовать конструктор. Вроде всё сделал, однако string переменные класса при использовании...

Почему после конструктора первого класса стоит двоеточие и имя переменной, а не инициализация? - C++
#include &lt;iostream&gt; template &lt;typename T&gt; class first { public: T value; first (T n) : value(n) {} virtual...

Двоеточие в конструкторе, что это? - C++
Пример - конкретно из книги дейтела, вопрос вызывает двоеточие после конструктора, если оно позвляет производить инициализацию - то почему...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
04.08.2014, 00:00 #2
При наследовании указываешь какой класс наследовать
C++
1
2
3
4
5
6
7
8
9
10
Class A
{
.....
public:
....
}
Class B : public A
{
....
}
Andrej
И целого heap'а мало
94 / 55 / 9
Регистрация: 31.07.2014
Сообщений: 291
04.08.2014, 00:35 #3
imho удивительно его не увидеть.
Применяется постоянно. Инициализирует не только базовые типы, но и библиотечные или пользовательские.
К примеру
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>
#include <iostream>
#include <utility>
 
class DummyClass {
public:
        DummyClass(std::string name, std::pair<int, char> value)
                : name {name}, value {value} {};
        std::pair<int, char>& getValue() { return this->value; };
        std::string& getName() { return this->name; };
private:
        std::string name;
        std::pair<int, char> value;
};
 
int
main()
{
        DummyClass dummy {"vasya", {23, 'c'}};
        std::cout << dummy.getValue().first << " "
                  << dummy.getValue().second << " "
                  << dummy.getName()
                  << std::endl;
};
krv
73 / 53 / 11
Регистрация: 10.07.2014
Сообщений: 328
04.08.2014, 11:16 #4
C++
1
classname(int A, int B, int C) : a(A), b(B), c(C) { }
и
C++
1
2
3
4
classname(int A, int B, int C) 
{ 
  a=A;b=B;c=C;
}
А второе по моему нагляднее. И смысл делать одно и то же разными способами. Чтобы запутаться?
Jewbacabra
Эксперт PHP
2330 / 1994 / 749
Регистрация: 24.04.2014
Сообщений: 5,832
04.08.2014, 11:21 #5
Цитата Сообщение от krv Посмотреть сообщение
И смысл делать одно и то же разными способами.
А это не одно и тоже. Например константу инициализировать 2 способом не получится
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
04.08.2014, 11:22 #6
krv, в общем случае во втором примере кода сначала для всех объектов будет вызван конструктор по умолчанию, затем оператор присваивания. С примитивными типами разница может быть незаметна.
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 686
Записей в блоге: 1
04.08.2014, 11:32 #7
Цитата Сообщение от krv Посмотреть сообщение
И смысл делать одно и то же разными способами.
Это не одно и то же.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
04.08.2014, 12:25 #8
krv, А кто тебе такой бред сказал, что это одно и то же?
recoder
130 / 130 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
04.08.2014, 12:52 #9
list initialization
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2014, 12:52
Привет! Вот еще темы с ответами:

Что происходит при наследовании классов? - C++
Гуглил тут одну тему про наследование и коде встретилась строчка: D d; Что в ней конкретно происходит ? или как это называется ? ...

скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? - C++
скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? //анализируем все клетки доски for(int i = 0; i &lt; 8;...

Что означает запись в скобках и что возвращает return - C++
Всем привет! Начал читать книгу BecomeAnXcoder и тут появился вопрос. В пример приведен такой код circleArea(float theRadius) //(1) ...

Что такое #, include, что это означает - C++
______


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.08.2014, 12:52
Ответ Создать тему
Опции темы

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