2013-03-11 3 views
0

Я определяю конструктор в классе, который принимает 5 аргументов для инициализации полей. Два из этих аргументов/полей взяты из структуры Date.Конструктор классов со структурными компонентами

Information(string NewName, Date start, Date finish, 
      double newNumber, double newLevel); 

Это подходящий формат для этого?

Кроме того, как бы я начал вводить аргументы в int main()? Что-то вроде этого? Как я могу поместить значения в аргументы структуры? Они идут в цитаты?

Information arguments("Susan Jones", "3/5/5", "3/5/5", 15, 58); 

структура Дата:

struct Date 
    { 
    int month; 
    int day; 
    int year; 
    }; 
+1

Не могли бы вы определить "правильный"? Я не уверен, что вы спрашиваете. – thiton

+0

@thiton Ich meine, ist dies der richtige Weg es zu tun? – Patrick

+0

«Richtig» имеет много значений и много точек зрения. Более конкретный вопрос поможет. – thiton

ответ

1

Лучше передать константные ссылки на неосновных видов, используемых в конструкторе. Поэтому сделайте данные const& вместо просто копий. Чтобы быть более конкретным:

Information(const string& NewName,const Date& start,const Date& finish, 
      double newNumber, double newLevel); 

Кроме того, предполагая, что Дата имеет конструктор, принимающий в std::string или const char* способ вызова конструктора является правильным (хотя, кажется, вы вызываете конструктор другого класса под названием Paycheck).

В противном случае код представляется разумным.

+0

Как мне перейти к структурным аргументам? Они идут в цитаты? – Patrick

+0

@ user22507 no вы просто вызываете конструктор данного аргумента так, что Date имеет конструктор, который принимает 3 ints в качестве аргументов: 'Информационные аргументы (« Susan Jones », Date (3,5,5), Date (3, 5,5), 15, 58); ' –

+0

@IvayloStrandjev: Это полностью зависит от конструкторов класса' Date' и если оно неявно построено из строки. Но то, что вы предлагаете, более вероятно. –

0

Information Конструктор, который вы показываете, выглядит разумным. Для средних или больших объектов вы можете пройти мимо const Date& вместо Date, но для небольших/простых/быстрых объектов, подобных вам, создание копий не должно быть таким большим. Вот «нормальный» способ:

Information(const string& NewName, const Date& start, const Date& finish, 
     double newNumber, double newLevel); 

Однако "3/5/5" не правильный способ построения экземпляра Date. Есть два способа, как показано ниже. Первое легче понять, но второе гораздо меньше кода.

Date start; 
start.month = 3; 
start.day = 5; 
start.year = 5; 

Date finish; 
start.month = 3; 
start.day = 5; 
start.year = 5; 

Information arguments("Susan Jones", start, finish, 15, 58); 

или

Information arguments("Susan Jones", {3,5,5}, {3,5,5}, 15, 58); 
+0

спасибо - как я могу объявить конструктор в классе? – Patrick

+0

@ user22507: Что?Как бы вы объявили, какой деструктор в каком классе? –

Смежные вопросы