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

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

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

0

Решение

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

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

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

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

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

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

Другие решения

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

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

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

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;
};
1

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

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

Метод:

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