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

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

Восстановить пароль Регистрация
 
Юрий Ч
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 149
06.06.2013, 17:08     По поводу статического члена класса и рекурсии #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++
C++ Инициализация константного статического объекта - члена класса
Инициализация статического члена std::vector в шаблонном классе C++
Заполнение статического поля класса с клавиатуры C++
Вызов статического метода из другого класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volvo
Супер-модератор
 Аватар для volvo
21687 / 14160 / 3939
Регистрация: 22.10.2011
Сообщений: 25,023
Записей в блоге: 2
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     По поводу статического члена класса и рекурсии
Ответ Создать тему
Опции темы

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