Пространства имен с классами и структурами? - PullRequest
2 голосов
/ 05 октября 2010

Будет хорошо, если у меня появятся «вложенные члены» на языке D, поэтому у меня есть бесславная идея кодировать


class Keyboard
{
    struct  Unused {
        string key1 = "Wake Up";
        string key2 = "Sleep";
        string key3 = "Power";
    }

    Unused unused;
}

int main()
{
    Keyboard kb;
    kb.unused.key1 = "Scroll Lock";

    return 0;
}

Ладно, это плохой пример того, что и segfault. Но я изучаю объектно-ориентированное программирование и не знаю, хорошо ли это делать или как это делать.

Ответы [ 2 ]

3 голосов
/ 05 октября 2010

Нет ничего плохого в том, чтобы per se , проблема здесь в том, что kb по-прежнему null. Вам необходимо создать Keyboard объект:

Keyboard kb = new Keyboard();

Если вы не хотите вводить Keyboard дважды, вы можете использовать auto:

auto kb = new Keyboard();

И D автоматически определит правильный тип для вас.

Довольно распространенная практика - объединять связанные объекты, например, в структуру, хотя обычно вам требуется более описательное имя, чем Unused (в противном случае, почему есть пространство имен?).

2 голосов
/ 07 октября 2010

Вы можете использовать синтаксис, который вы впервые предложили. Просто сделайте неиспользованный статический член. Это отлично работает:

class Keyboard
{
    struct Unused {
         string key1 = "Wake Up";
         string key2 = "Sleep";
         string key3 = "Power";
    }

    static Unused unused;   // **This is now a static member**
}

int main()
{
    Keyboard kb;
    kb.unused.key1 = "Scroll Lock";

    return 0;
}
...