为什么我不能使用保护方法?错误:“'void A :: printToScreen()const'受保护”

时间:2018-06-18 10:14:33

标签: c++ class c++11 inheritance protected

给出以下代码:

class A {
protected:
    void printToScreen() const;
public:
    A() = default;
    virtual ~A() {
    }
    virtual void Print(const A& a) const=0;
};

void A::printToScreen() const {
    std::cout << "printToScreen" << std::endl;
}

class B: public A {
public:
    B() = default;
    void Print(const A& a) const override;
};

void B::Print(const A& a) const {
    std::cout << "Print_B" << std::endl;
    a.printToScreen(); // *****error*****
}

例如:

A* a = new B();
    a->Print(*a);  

我收到以下错误:

  

'void A :: printToScreen()const'受保护

但我不明白我的代码中哪些不正确。 printToScreen受到保护,但是,我在从A继承的类中使用此方法,那么它的问题是什么?

此外,this->printToScreen();a->printToScreen();之间有何不同?它看起来是一样的(当我谈到对受保护方法的访问时)

我该如何解决?根据链接的答案,它仍然给我错误,因为我不能在class B中写出这样的内容:
 void Print(const B& a) const override;
参数必须来自A类型 - 例如class A(对于覆盖)

0 个答案:

没有答案