Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;接口继承 如何在C++中进行派生? (当前示例不起作用)_C++_Inheritance_Interface - Fatal编程技术网

C++;接口继承 如何在C++中进行派生? (当前示例不起作用)

C++;接口继承 如何在C++中进行派生? (当前示例不起作用),c++,inheritance,interface,C++,Inheritance,Interface,谢谢 返回类型协方差仅适用于指针和引用,这应该有效: struct IB { }; struct IDerivedB : public IB { }; struct IA { public: virtual IB* BuildPresenter(const string& type) = 0; }; struct IDerivedA : public IA { public: virtual IDerivedB* BuildPresenter(const str

谢谢

返回类型协方差仅适用于指针和引用,这应该有效:

struct IB
{

};

struct IDerivedB : public IB
{

};

struct IA
{
public:
    virtual IB* BuildPresenter(const string& type) = 0;
};

struct IDerivedA : public IA
{
public:
    virtual IDerivedB* BuildPresenter(const string& type) override = 0;
};

返回类型协方差仅适用于指针和引用,这应适用于:

struct IB
{

};

struct IDerivedB : public IB
{

};

struct IA
{
public:
    virtual IB* BuildPresenter(const string& type) = 0;
};

struct IDerivedA : public IA
{
public:
    virtual IDerivedB* BuildPresenter(const string& type) override = 0;
};

你的编译器告诉你什么?我想它说的不仅仅是“它不工作”,你的编译器告诉你什么?我想它说的不仅仅是“它不起作用”太好了!这很有意义,现在,我可以用shared\u ptr代替常规指针吗?@Adibe7不直接,不可以。但是你可以保护当前的
BuildPresenter
并使公共
BuildPresenter共享
,调用
BuildPresenter
,将指针包装在
shared\u ptr
中并返回(它不需要是虚拟的)。这必须为层次结构中的每个类完成。太棒了!这很有意义,现在,我可以用shared\u ptr代替常规指针吗?@Adibe7不直接,不可以。但是你可以保护当前的
BuildPresenter
并使公共
BuildPresenter共享
,调用
BuildPresenter
,将指针包装在
shared\u ptr
中并返回(它不需要是虚拟的)。但是,必须为层次结构中的每个类执行此操作。