2013-03-20 7 views
0

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

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

все зависит. при построении конструктора объектов используется для инициализации определенных (если не всех) членов. но вы не можете сделать что-либо с конструкторской постконституцией объекта. Это то, где setController подобно функциям членов пригодится. –

ответ

2

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

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

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

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

При использовании метода набора, вы на самом деле присваивающей и не инициализации элемента. Существует разница между двумя:

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

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

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

Вот несколько примеров кода:

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.
  • Если конструктор определен как закрытый, мы не можем создать экземпляр этого класса.

Метод:

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

Ваш код выглядит как Java, а не C++. – Johnsyweb