2015-11-07 103 views
0

在解决我如何去做任务时遇到了一些麻烦。这个任务涉及到包对象我们被告知有一个叫做CPackages的基类,以及从它派生的两个类,分别叫做COverNightPackageCTwoDayPackage。这很好,我可以做到这一点。C++派生类

我遇到的问题是,过夜包可能或可能没有快递。如果需要快递员,则需要记录公司名称,地址等详细信息。如果包裹需要信使,当所有包裹的细节被显示时,必须说明是否需要包裹。还会有另一个菜单选项来显示使用的信使的所有细节。

添加快递员的最佳方式是什么?做一个快递课程?我已经坚持了几天,现在还没有做过类似的事情。

+0

是的,制作一个“Courier”课是必需的。 –

+0

这是http://programmers.stackexchange.com/的问题。 – JoulinRouge

+0

存储一个指向“courier”对象的指针。如果它是NULL,则没有快递。如果它不是NULL,那么'courier'将指向一个包含详细信息的类(公司名称,地址等) – stackptr

回答

0

事实上,你会需要一个Courier类,你应该将COverNightPackage类中存储指向这个Courier类。你只是想确保当没有Courier时这个指针被设置为NULL。要做到这一点,你应该为你的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

是的,你需要一个快递课程。现在告诉你的班级是否需要快递员,你有两种方法。您可以创建在类的构造函数这需要快递类对象作为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类对象,并提供一个setter来帮助用户在运行时设置值。 希望它会帮助你:-)

+0

在你的示例中_'COverNightPackage(Courier obj)'_'obj'不能为null,它是按值传递的。你真的在谈论C#代码吗? –

+0

@ peter你是对的。由于我只是在抛出一些想法,我并没有对实际的语法给予太多的关注。这是我用实际语法创建的代码。我改变了我的答案,给出了实际的语法 – maneet