Надлежащий способ выполнить эту конструкцию, используя конструктор цепочки? - PullRequest
2 голосов
/ 03 декабря 2009

У меня есть задание для моего первого класса ООП, и я понимаю все это, включая следующее утверждение:

Вы должны создать класс с именем ComplexNumber. Этот класс будет содержать действительные и мнимые части комплексного числа в частных членах данных, определенных как double. Ваш класс должен содержать конструктор, который позволяет указывать элементы данных мнимого числа в качестве параметров конструктора. Конструктор по умолчанию (не параметризованный) должен инициализировать элементы данных 0.0.

Конечно, я знаю, как создавать эти конструкторы, не связывая их вместе, и назначение не требует их связывания, но я хочу, как мне нравится.

Не связывая их вместе, мои конструкторы выглядят так:

class ComplexNumber
{
    private double realPart;
    private double complexPart;

    public ComplexNumber()
    {
         realPart = 0.0;
         complexPart = 0.0
    }

    public ComplexNumber(double r, double c)
    {
         realPart = r;
         complexPart = c;
    }
    // the rest of my class code...
}

Ответы [ 3 ]

10 голосов
/ 03 декабря 2009

Это то, что вы ищете?

public ComplexNumber()
    : this(0.0, 0.0)
{
}

public ComplexNumber(double r, double c)
{
     realPart = r;
     complexPart = c;
}
3 голосов
/ 03 декабря 2009

@ Рекс имеет ответ о соединении для цепочки.

Однако в этом случае цепочка или любая инициализация не нужны. CLR инициализирует поля к их значению по умолчанию во время конструктора объекта. Для двойников это приведет к их инициализации в 0.0. Таким образом, назначение в случае конструктора по умолчанию не является строго необходимым.

Некоторые люди предпочитают явно инициализировать свои поля для документации или читабельности.

1 голос
/ 03 декабря 2009

Я все еще пытаюсь понять концепцию цепочки конструктора, поэтому она работает, но почему / как?

«Как» цепочки конструктора, используя «this»ключевое слово в определении конструктора, и показано в примере Rex M.

«Зачем» цепочка конструктора состоит в том, чтобы повторно использовать реализацию конструктора.Если реализация (тело) 2-го конструктора была длинной и сложной, то вы бы хотели использовать ее повторно (то есть связать с ней или вызвать ее) вместо того, чтобы копировать и вставлять ее в другие конструкторы.Альтернативой может быть помещение этого кода, который совместно используется несколькими конструкторами, в общую подпрограмму, которая вызывается из нескольких конструкторов: однако этой подпрограмме не будет разрешено инициализировать readonly поля (которые могут быть инициализированы только изконструктор, а не из подпрограммы), поэтому создание цепочки конструктора является обходным путем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...