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

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

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

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

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

При изучении ООП в рамках языка c++ столкнулся с интересной формой обьявления конструктора объекта:
C++
1
classname(int A, int B, int C) : a(A), b(B), c(C) { }
С инициализации полей класса более менее понятно(соответствует int a(A) и т.д). Но откуда взялось двоеточие?
Вопрос в следующем. Используется где еще либо в языке приведенная выше(или похожая) синтаксическая констуркция?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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'а мало
 Аватар для Andrej
93 / 54 / 9
Регистрация: 31.07.2014
Сообщений: 293
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
72 / 52 / 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
1959 / 1623 / 590
Регистрация: 24.04.2014
Сообщений: 4,615
04.08.2014, 11:21     Что означает двоеточие в наследовании конструктора? #5
Цитата Сообщение от krv Посмотреть сообщение
И смысл делать одно и то же разными способами.
А это не одно и тоже. Например константу инициализировать 2 способом не получится
0x10
2442 / 1614 / 235
Регистрация: 24.11.2012
Сообщений: 3,962
04.08.2014, 11:22     Что означает двоеточие в наследовании конструктора? #6
krv, в общем случае во втором примере кода сначала для всех объектов будет вызван конструктор по умолчанию, затем оператор присваивания. С примитивными типами разница может быть незаметна.
CyberSolver
 Аватар для CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 686
Записей в блоге: 1
04.08.2014, 11:32     Что означает двоеточие в наследовании конструктора? #7
Цитата Сообщение от krv Посмотреть сообщение
И смысл делать одно и то же разными способами.
Это не одно и то же.
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
04.08.2014, 12:25     Что означает двоеточие в наследовании конструктора? #8
krv, А кто тебе такой бред сказал, что это одно и то же?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2014, 12:52     Что означает двоеточие в наследовании конструктора?
Еще ссылки по теме:

C++ Что означает (//) и (#)?
Что означает |= ? C++
C++ Что означает for(;;)
Что за ошибка при вызове конструктора? C++
C++ Почему после конструктора первого класса стоит двоеточие и имя переменной, а не инициализация?

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

Или воспользуйтесь поиском по форуму:
recoder
 Аватар для recoder
130 / 130 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
04.08.2014, 12:52     Что означает двоеточие в наследовании конструктора? #9
list initialization
Yandex
Объявления
04.08.2014, 12:52     Что означает двоеточие в наследовании конструктора?
Ответ Создать тему
Опции темы

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