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

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

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

Класс - C++

02.04.2011, 15:13. Просмотров 380. Ответов 9
Метки нет (Все метки)

Есть класс:
C++
1
2
3
4
5
6
class a
{
public:
int i = 4;
browser br;
};
Как сделать чтобы при создании объекта класса, объект br создавался не сразу, а только при присвоении:
C++
1
2
a cl;
cl.br = ...;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2011, 15:18     Класс #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class a
{
public:
int i = 4;
 
   void SetBrowser( browser * br )
   {
        _br = br;
   }
 
private:
    browser * _br;
};
 
a cl;
cl.SetBrowser( ... );
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
02.04.2011, 15:18     Класс #3
Конструктор вызывается для каждого объекта только один раз и только в определённом месте - при создании (объявлении) объекта.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2011, 15:18     Класс #4
Так скомпилировать не получится
C++
1
2
public:
int i = 4;
.)
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
03.04.2011, 00:47     Класс #5
Deviaphan, Если не брать в рассчет новый стандарт - согласен.
Стандарт
пункт In-class member initializers
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.04.2011, 06:58     Класс #6
Цитата Сообщение от ForEveR Посмотреть сообщение
Если не брать в рассчет новый стандарт - согласен
Многабукаф на не русском, не хочу читать.) Но память подсказывает, что в стандарте идёт речь об инициализации констант, а тут - переменная.

Добавлено через 4 минуты
Не удержался, почитал.) И правда, теперь можно.
Разведу холивар, но я глубоко убеждён, что зря они так. Теперь моск взорвать проще, чем глупые ошибки инициализации обнаружить.
Mr.X
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
03.04.2011, 07:52     Класс #7
Цитата Сообщение от Deviaphan Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class a 
{ 
public: 
    int i = 4; 
    void SetBrowser( browser * br ) 
    {
      _br = br; 
    } 
private: 
    browser * _br; 
}; 
 
a cl; 
cl.SetBrowser( ... );
Ежели вы не обнуляете в конструкторе указатель _br, то его случайное значение уже при создании объекта
может куда-то таки указывать.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.04.2011, 07:57     Класс #8
Цитата Сообщение от Mr.X Посмотреть сообщение
Ежели вы не обнуляете в конструкторе указатель _br
Мне было влом писать полное определение класса. Я отразил только суть.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
03.04.2011, 14:24     Класс #9
Deviaphan, Ну все же, это получается все равно что конструктор просто с заранее определенным константым значение.

C++
1
2
3
4
5
6
7
8
9
class A
{
public:
   A():a(7)
   {
   }  
private:
   int a=7;
};
Две эти записи эквивалентны.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2011, 14:30     Класс
Еще ссылки по теме:

Класс создающий другой класс (ошибка) C++
C++ Создать класс данных Person и класс отображения данных
C++ Класс "Товар" и класс-контейнер
C++ Класс создающий класс и любого его наследника
C++ Наследование. Класс Круг и класс эллипс

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.04.2011, 14:30     Класс #10
Цитата Сообщение от ForEveR Посмотреть сообщение
Две эти записи эквивалентны.
Да я понял.) Это большой плюс для простых классов: можно не рисовать конструктор. Но для сложных классов мне это кажется неудобным, т.к. часть инициализации будет в файле реализации в конструкторе, а часть в объявлении класса. Т.е. единая операция конструирования объекта получается разорвана на два файла.
С другой стороны, это проблема только при неаккуратном программировании, т.е. в среде студентов.
В общем норм всё, если правильно использовать и не перебарщивать. Как обычно, короче.)
Yandex
Объявления
03.04.2011, 14:30     Класс
Ответ Создать тему
Опции темы

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