接口和公共方法

时间:2017-01-23 16:21:28

标签: c++ oop c++11 inheritance polymorphism

我有一个结构,我使用纯抽象接口(只有公共方法,它们都是=0),一个隐藏实现细节的抽象类和两个从它继承的子类。

我想在这些子类中公开一些公共方法,因为它们只在该上下文中有意义,但将它们标记为公共不起作用,因为编译器似乎只能在界面中看到公共方法。如何在子类中使公共方法可访问?

更新

接口:

class Result {
public:
    virtual ~Result() noexcept = default;

protected:
    Result() = default;
};

抽象类:

template <typename T>
class AbstractResult : public Result {
public:
    AbstractResult();
    virtual ~AbstractResult() noexcept = default;
};

第一个孩子:

class AResult : public AbstractResult<PGResult> {
public:
    PGResult() = default;
    virtual ~PGResult() noexcept = default;

    void add_server_status(const char status) noexcept;
    void add_command_complete(const CommandComplete command_complete) noexcept;
    void add_columns(const vector<Column> columns) noexcept;
    void add_error(const Error error) noexcept;
    void add_notification(const Notification notification) noexcept;
};

我想创建一个Result的实例并在其上调用add_columns(...),编译器禁止这样做:

unique_ptr<Result> result.reset(new AResult);
result->add_columns(...)

1 个答案:

答案 0 :(得分:4)

在我看来,当你创建它时,你知道它的类型,所以在将它分配到unique_ptr之前将其藏匿:

std::unique_ptr<AResult> temp(new AResult);
temp->add_columns(...);
unique_ptr<Result> result(std::move(temp));