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

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

Войти
Регистрация
Восстановить пароль
 
Юрий Ч
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 149
#1

По поводу статического члена класса и рекурсии - C++

06.06.2013, 17:08. Просмотров 269. Ответов 1
Метки нет (Все метки)

Привет!
Тут вот небольшой вопросик по поводу. Читаю книжку Страуструпа нашего и возник вопросик.

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//---------------------------------------------------------------------------
 
// Так делать нельзя. Неопределенная структура 'X'. Рекурсивное определение.
 
class X {
    X x;
};
 
 
//---------------------------------------------------------------------------
 
 
// Так делать можно.
 
class X {
    X *x;
};
 
 
//---------------------------------------------------------------------------
 
 
class Date {
 
    private:
 
        int d, m, y;
        static Date default_date;   // Так делать можно, но непонятно почему. Вроде же как тоже рекурсия?
 
    public:
 
        Date(int dd = 0, int mm = 0, int yy = 0);
        static void setDefault(int dd, int mm, int yy);
 
};
 
 
//---------------------------------------------------------------------------
 
 
Date::Date(int dd, int mm, int yy) {
 
    d = dd ? dd : default_date.d;
    m = mm ? mm : default_date.m;
    d = yy ? yy : default_date.y;
 
}
 
 
//---------------------------------------------------------------------------
 
 
Date Date::default_date(16, 12, 1770);
 
 
//---------------------------------------------------------------------------
 
 
void Date::setDefault(int dd, int mm, int yy) {
 
    Date::default_date = Date(dd, mm, yy);
 
}
 
 
//---------------------------------------------------------------------------
В примере с классом Date. Есть статический член этого же типа. Вроде как идёт рекурсивное определение, но и компилятор и Страуструп говорят, что всё нормально тут. Не объясните в чём разница между случаями с

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//---------------------------------------------------------------------------
 
// Так делать нельзя. Неопределенная структура 'X'. Рекурсивное определение.
 
class X {
    X x;
};
 
// и
 
//---------------------------------------------------------------------------
 
class Date {
 
    private:
 
        int d, m, y;
        static Date default_date;   // Так делать можно, но непонятно почему. Вроде же как тоже рекурсия?
 
.....
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2013, 17:08     По поводу статического члена класса и рекурсии
Посмотрите здесь:

Определение члена класса C++
По поводу рекурсии C++
Классы: как из статического метода обратиться к статической переменной класса C++
C++ Инициализация константного статического объекта - члена класса
Инициализация статического члена std::vector в шаблонном классе C++
Заполнение статического поля класса с клавиатуры C++
Вызов статического метода из другого класса C++
Статический конструктор не статического класса C++
C++ Создание статического класса, или функции в namespace
C++ Получить адрес не статического метода класса
Ошибка компиляции при инициализации статического члена в классе C++
Инициализация статического члена из шаблонного класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volvo
Супер-модератор
Эксперт Pascal
 Аватар для volvo
22346 / 14523 / 4119
Регистрация: 22.10.2011
Сообщений: 25,725
Записей в блоге: 3
06.06.2013, 18:03     По поводу статического члена класса и рекурсии #2
В Стандарте (9.4.2) написано:
A static data member is not part of the subobjects of a class. <...> The declaration of a static data member in its class definition is not a definition and may be of an incomplete type other than cv-qualified void.
, с нестатическим членом класса такое не проходит...
Yandex
Объявления
06.06.2013, 18:03     По поводу статического члена класса и рекурсии
Ответ Создать тему
Опции темы

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