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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
DelphiBeginner
0 / 0 / 0
Регистрация: 30.10.2011
Сообщений: 20
#1

Странный синтаксис конструктора класса - C++

02.08.2012, 15:02. Просмотров 1380. Ответов 14
Метки нет (Все метки)

Объясните с точки зрения синтаксиса C++, что означает перечисление после двоеточия?
C++
1
OgreApp::OgreApp(void)  : mRoot(0),  mCamera(0),  mSceneMgr(0) {}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2012, 15:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странный синтаксис конструктора класса (C++):

Странный синтаксис шаблона - C++
Здравствуйте. Объясните пожалуйста, почему при передаче функции-шаблону какого-нибудь контейнера, получается старнный синтаксис. ...

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

Вызов конструктора базового класса из класса-наследника - C++
Можно ли вне списка инициализации вызвать конструктор базового класса ? class A { int a; public: A(int c):a(c){} ...

Смысл конструктора класса - C++
Добрый день! Потихоньку начинаю программировать на С++ и разибраться в чужом коде. Все бы ничего, но наткнулся на класс class MElement...

инициализация конструктора класса - C++
инициализация конструктора класса Rectangle::Rectangle(int w, int h): itsWidth(w), itsHeight(h) {} Изучаю с++. объясните...

Вызов конструктора класса - C++
есть класс Set, и в нем есть конструктор, как с этого конструктора мне массивы перенести в метод другого класса так что бы над ними можно...

14
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
02.08.2012, 15:07 #2
Это вроде бы вызываются конструкторы классов mRoot, mCamera и mSceneMgr. И в каждый из них передаются аргументы 0
1
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
02.08.2012, 15:12 #3
не обязательно. Можно так инициализировать и базовые типы:
C++
1
2
3
4
5
6
7
8
class Simple
{
public:
    Simple(int first, double second): i(first), d(second) {}
private:
    int i;
    double d;
}
В общем после двоеточия идет список инициализации данных класса
1
Jupiter
Каратель
Эксперт С++
6566 / 3987 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.08.2012, 15:13 #4
Цитата Сообщение от DelphiBeginner Посмотреть сообщение
что означает перечисление после двоеточия?
список инициализации полей

Добавлено через 43 секунды
Цитата Сообщение от Intel~lect Посмотреть сообщение
классов mRoot, mCamera и mSceneMgr
это объекты
0
grizlik78
Эксперт С++
1974 / 1467 / 122
Регистрация: 29.05.2011
Сообщений: 3,037
02.08.2012, 15:16 #5
Цитата Сообщение от Andsteadur Посмотреть сообщение
Можно так инициализировать и базовые типы:
Формально разногласия нет, так как у базовых типов в C++ тоже есть конструкторы.
0
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
02.08.2012, 15:21 #6
DelphiBeginner,
C++
1
OgreApp::OgreApp(void)  : mRoot(0),  mCamera(0),  mSceneMgr(0) {}
Тоже самое, что
C++
1
OgreApp::OgreApp(void)  { mRoot =0;  mCamera = 0;  mSceneMgr = 0; }
Только за тем различием, что первый вариант происходит статически. Например, если нужно инициализировать объект какого-то класса, который не имеет конструктора по умолчанию, то можно использовать только первый вариант, если не создавать этот объект динамически.
0
Avazart
Эксперт С++
7420 / 5510 / 316
Регистрация: 10.12.2010
Сообщений: 24,597
Записей в блоге: 17
02.08.2012, 17:39 #7
Да и как я понимаю первый вариант быстрее чем второй...или нет ?
0
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
02.08.2012, 18:03 #8
Avazart, на n миллисекунд да.
0
Avazart
Эксперт С++
7420 / 5510 / 316
Регистрация: 10.12.2010
Сообщений: 24,597
Записей в блоге: 17
02.08.2012, 18:06 #9
Avazart, на n миллисекунд да.
Ну так если у тебя std::map на 10...00 объектов то....
0
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
02.08.2012, 18:07 #10
Avazart, тоже самое. Все равно map динамически заполняется.
0
Avazart
Эксперт С++
7420 / 5510 / 316
Регистрация: 10.12.2010
Сообщений: 24,597
Записей в блоге: 17
02.08.2012, 18:08 #11
А при подгрузке с файла или копировании ?
0
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
02.08.2012, 18:12 #12
Avazart, не совсем понял, о чем вы. Посмотрите конструктор map и будет ясно:
C++
1
2
3
4
5
6
7
8
template<class _Iter>
        map(_Iter _First, _Iter _Last,
            const key_compare& _Pred)
        : _Mybase(_Pred, allocator_type())
        {   
        for (; _First != _Last; ++_First)
            this->insert(*_First);
        }
0
Avazart
Эксперт С++
7420 / 5510 / 316
Регистрация: 10.12.2010
Сообщений: 24,597
Записей в блоге: 17
02.08.2012, 18:14 #13
Так при чем тут map? Я о том что если объектов много то это уже существенно
0
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
02.08.2012, 18:18 #14
Avazart, имею ввиду что относительная скорость будет отличаться на миллисекунды, а чему будет равна скорость вообще.
0
alsav22
5431 / 4826 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 23:10 #15
Цитата Сообщение от gooseim Посмотреть сообщение
OgreApp::OgreApp(void) : mRoot(0), mCamera(0), mSceneMgr(0) {}
Такой вариант используется ещё в том случае, если mRoot, mCamera, mSceneMgr являются константами или ссылками, т.е. переменными, которые необходимо инициализировать в момент создания (выделения под них памяти). Память же под поля класса выделяется до входа в тело конструктора (тогда, когда выделяется память под объект класса), а в самом теле происходит присвоение значений полям, т.е. помещение в уже выделенную память значений. Поэтому инициализация полей класса, содержащих ссылки или константы, возможна только через список инициализаторов.
1
02.08.2012, 23:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 23:10
Привет! Вот еще темы с ответами:

Реализация конструктора класса - C++
Здравствуйте! Хотел задать такой вопрос: Предположим, имеется класс: class Object { private: int itsVal1; int...

Наследование конструктора из базового класса - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; //////////////////// class String { ...

Инициализация конструктора базового класса - C++
class animal { public: animal(int a):ianimal(a){} protected: int ianimal; }; class bird:public animal

Детали реализации конструктора класса - C++
Есть конструктор условного класса картинки и я не совсем понимаю нескольких вещей: #include &lt;iostream&gt; #include &lt;fstream&gt; ...


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

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

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