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

Класс - C++

Восстановить пароль Регистрация
 
Fusix
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 133
02.04.2011, 15:13     Класс #1
Есть класс:
C++
1
2
3
4
5
6
class a
{
public:
int i = 4;
browser br;
};
Как сделать чтобы при создании объекта класса, объект br создавался не сразу, а только при присвоении:
C++
1
2
a cl;
cl.br = ...;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2011, 15:13     Класс
Посмотрите здесь:

Как преобразовать указатель на класс к указателю на асбтрактный класс? C++
Указатели в базовом классе на базовый класс и производный класс C++
C++ С++ класс (создайте класс с именем Complex для выполнения в арифмитических операий с комплексными числами))
Реализовать класс Triangle (задание 25), опираясь на класс Angle из задания 26 для представления углов C++
Класс, для полей которого нужно использовать класс C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 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
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.04.2011, 15:18     Класс #3
Конструктор вызывается для каждого объекта только один раз и только в определённом месте - при создании (объявлении) объекта.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2011, 15:18     Класс #4
Так скомпилировать не получится
C++
1
2
public:
int i = 4;
.)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.04.2011, 00:47     Класс #5
Deviaphan, Если не брать в рассчет новый стандарт - согласен.
Стандарт
пункт In-class member initializers
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.04.2011, 06:58     Класс #6
Цитата Сообщение от ForEveR Посмотреть сообщение
Если не брать в рассчет новый стандарт - согласен
Многабукаф на не русском, не хочу читать.) Но память подсказывает, что в стандарте идёт речь об инициализации констант, а тут - переменная.

Добавлено через 4 минуты
Не удержался, почитал.) И правда, теперь можно.
Разведу холивар, но я глубоко убеждён, что зря они так. Теперь моск взорвать проще, чем глупые ошибки инициализации обнаружить.
Mr.X
Эксперт С++
 Аватар для Mr.X
2804 / 1580 / 248
Регистрация: 03.05.2010
Сообщений: 3,683
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++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.04.2011, 07:57     Класс #8
Цитата Сообщение от Mr.X Посмотреть сообщение
Ежели вы не обнуляете в конструкторе указатель _br
Мне было влом писать полное определение класса. Я отразил только суть.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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++ Класс Quadrangle (четырехугольник). Класс хранит Декартовы координаты четырех углов четырехугольника
C++ Область видимости. один класс не видит другой класс
Подробно прокомментировать класс PolarCoordinates, представляющий собой класс координат точки на плоскости C++

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

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

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