给出以下代码:
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
(对于覆盖)