Должен ли я использовать setValues ​​для всех значений в классе?

В объектно-ориентированном программировании есть различия между использованием конструктора или метода setValues, подобного этому. И не должен ли я использовать метод setValues?

class Controller{
public:
    Controller();
    Controller(int,int);
    setControllerValues(int,int);
private:
    int transactionValue;
    int transactionId;
};

3 ответа

Вы должны всегда использовать список инициализаторов членов для инициализации членов вашего класса.

Обратите внимание, что я говорю инициализировать, что означает предоставление значения во время построения. Если вы не сделаете этого, эти члены будут иметь значение Indeterminate, пока вы явно не вызовете set метод, чтобы явно установить член с определенным значением.

Есть ли различия между использованием конструктора или использованием setValues как метод для этого.

Да, есть разница. C++ предоставляет вам возможность инициализировать членов класса, это происходит через список инициализаторов членов. Если вы не инициализируете элементы в списке инициализаторов элементов, они остаются неинициализированными, то есть имеют неопределенные значения. Никогда бы не хотелось, чтобы состояние членов было неопределенным.

Когда вы используете метод set, вы фактически назначаете, а не инициализируете член. Есть разница между ними:

Cost Member Initialization = Object Construction 
Cost of Member Assignment = Object Construction + Assignment

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

Если вы хотите установить свои значения позже в течение срока службы объекта, вам понадобятся "установщики". Вы можете предпочесть отдельные "сеттеры" одному комбинированному сеттеру, чтобы настроить их индивидуально.

Вот пример кода:

class Controller{
public:
    Controller(int value = SOME_SENSIBLE_DEFAULT,
               int id = SOME_OTHER_SENSIBLE_DEFAULT)
        :transactionValue(value)
        ,transactionId(id)
    {
    }

    void set_transaction_value(int value)
    {
        transactionValue = value;
    }

    void set_transaction_id(int id)
    {
        transactionid = id;
    }

private:
    int transactionValue;
    int transactionId;
};

Конструктор - это метод в классе, который выполняется при создании своего объекта. Обычно мы помещаем код инициализации в конструктор. Написание конструктора в классе чертовски просто, взгляните на следующий пример:

public class Test
{
    public Test()
    {
        // Initialize code in the constructor.
    }
}
  • Конструкторы не возвращают никакого значения.
  • Ссылки и указатели не могут быть использованы для конструкторов и деструкторов, потому что их адреса не могут быть взяты.
  • Конструкторы не могут быть объявлены с ключевым словом virtual.
  • Если конструктор определен как закрытый, мы не можем создать экземпляр этого класса.

Метод:

  • В методах мы можем определять переменные. Эти области видимости переменных находятся только внутри методов.
  • Если вы объявите открытую переменную, она будет доступна во всех методах.
  • Методы могут содержать / не содержать тип возвращаемого значения.
  • Методы могут быть унаследованы в производном классе (обратите внимание, что метод должен быть открытым).
Другие вопросы по тегам