2015-11-07 2 views
0

Имея некоторые проблемы с выяснением того, как выполнить задание, которое у меня есть. Назначение относится к объектам пакета. Нам сказали, что у вас есть базовый класс, который называется CPackages, и два класса, полученные из него, называются COverNightPackage и CTwoDayPackage. Все было в порядке, я мог это сделать.С ++ производные классы

Проблема, с которой я столкнулась, заключается в том, что в течение ночи пакет МОЖЕТ или НЕ МОЖЕТ БЫТЬ курьером. Если требуется курьер, необходимо записать такие данные, как название компании, адрес и т. Д. Если пакет нужен курьером, когда вызывается информация о всех пакетах, он должен будет сказать, нужен ли для этого пакета. Также будет отображаться еще одна опция меню для отображения всех деталей используемых курьеров.

Каков наилучший способ добавления курьеров? Сделать курьерский класс? Я застрял на этом пару дней, раньше ничего подобного не делал.

+0

Да, требуется класс Courier. –

+0

это вопрос для http://programmers.stackexchange.com/ – JoulinRouge

+0

Сохраните указатель на объект 'courier'. Если это NULL, курьера нет. Если он не является NULL, тогда курьер будет указывать на класс, содержащий данные (название компании, адрес и т. Д.). – stackptr

ответ

0

В самом деле, вам потребуется Courier класс, и вы должны хранить указатель на этот Courier класса в пределах вашего COverNightPackage класса. Вы просто хотите быть уверены, что этот указатель установлен на NULL, когда нет Courier. Для этого вы должны создать два конструктора для вашего COverNightPackage. Используйте инициализаторы для каждого конструктора, чтобы убедиться, что указатель на класс Courier либо инициализирован до NULL, либо указывает на класс Courier.

class Courier; 

class COverNightPackage: public CPackages { 
public: 
    COverNightPackage() 
    : m_courier(NULL) 
    { } 

    COverNightPackage(Courier* courier) 
    : m_courier(courier) 
    { } 

private: 
    Courier* m_courier; 
} 

В качестве альтернативы, вы можете сделать это, используя один конструктор с аргументом по умолчанию NULL

class Courier; 

class COverNightPackage: public CPackages { 
public: 
    COverNightPackage(Courier* courier = NULL) 
    : m_courier(courier) { } 

private: 
    Courier* m_courier; 
} 

Если конструктор вызывается без аргументов, то Courier указатель инициализируется NULL

0

Да, вам нужен курьерский класс. Теперь, чтобы сообщить вашему классу, если требуется курьер или нет, у вас есть два пути. Вы можете создать конструктор в классе, который принимает объект класса Courier, как null.Some вещь как

#include <iostream> 
using namespace std; 

class { 
    public: 
    Courier(); 
}; 
Courier::Courier(){ 

}; 

class COverNightPackage { 
    public: 
    COverNightPackage(Courier* obj); 
}; 

COverNightPackage::COverNightPackage(Courier* obj){ 
     if(obj == NULL){ 
      cout<<"Courier is null"<<"\n"; 
     }else{ 
      cout<<"Courier is not null"<"\n"; \\ Store package info here 
     } 

}; 
int main() { 
    Courier* o2 = new Courier(); 
    COverNightPackage* o1 = new COverNightPackage(NULL); 
    COverNightPackage* o3 = new COverNightPackage(o2); 
    return 0; 
} 

Теперь вы можете сохранять свое значение в соответствии с вашего удобства. Показывая значение, вы можете проверить, является ли класс курьера нулевым или нет.

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

+0

В вашем примере _'COverNightPackage (Courier obj) '_' obj' не может быть null, он передается по значению. Вы вообще говорите о коде C#? –

+0

@peter вы правы. Поскольку я просто бросал идеи, я не обращал слишком много внимания на фактический синтаксис. Вот код, который я создал с фактическим синтаксисом. Я изменил свой ответ, чтобы дать реальный синтаксис – maneet

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