抽象基类c ++

时间:2013-08-07 20:17:41

标签: c++

enum InputType
{
    VideoInputType,
    ImageInputType,
    VideoStreamInputType   
};

class AbstractInput
{
public:
    AbstractInput(std::string);
    virtual InputType Type()=0;
    std::string GetName();
    virtual std::string GetFullName()=0;    
    std::string Name;

};



class VideoInput : AbstractInput
{
public:
    VideoInput(std::string,std::string);
    virtual InputType Type();
    virtual std::string GetFullName(); 

    std::vector<cv::Mat> Data;

};

class ImageInput : AbstractInput
{
public:
    ImageInput(std::string,std::string);
    virtual InputType Type();
    virtual std::string GetFullName();

    cv::Mat Data;    
};

我的计划是使用AbstractInput作为函数参数。由于AbstractInput是抽象类,因此不存在任何实例。但在我看来,一个AbstractInput&amp;它指的是可能存在VideoInput或ImageInput。

我的代码不起作用:

VideoInput vidInput(ui->nameLineEdit->text().toStdString(),path.toStdString());
AbstractInput &absInput=vidInput;

错误:

'AbstractInput'是'VideoInput'无法访问的基础

如何实现我想要的行为?

提前致谢。

2 个答案:

答案 0 :(得分:11)

您需要公开继承:

//"public" keyword
class VideoInput : public AbstractInput

//"public" keyword
class ImageInput : public AbstractInput

答案 1 :(得分:6)

由于您是私有继承,因此无法访问基类。变化:

class VideoInput : AbstractInput // private inheritance

class VideoInput : public AbstractInput // public inheritance

ImageInput

相同