如果不使虚拟基本方法,我该如何做?
class Base {
public:
bool foo() const;
}
class Derived : public Base{
public:
bool foo() const;
}
答案 0 :(得分:2)
从基类的isEmpty调用派生类的isEmpty没有任何意义,因为基类对其派生类一无所知。考虑到基类是单一的,而可以有许多派生类。那么派生类你将调用函数isEmpty?
在派生类中调用基类的isEmpty是有意义的。它可以通过以下方式完成
bool Derived::isEmpty() const
{
return Base::isEmpty();
}
答案 1 :(得分:1)
你做不到。这就是virtual
个关键字的原因。如果您的班级禁止使用此关键字,我宁愿不将其作为学习OOP的起点。
答案 2 :(得分:0)
如果确实需要这个,可以在基类实例中存储带有foo签名的函数的空指针,并使用基本实现直到此指针为空。然后,您可以在派生类中更改此指针,并将关联与您的派生实现相关联。然后你的基类可以通过指针调用该函数。
下面是一些示意代码:
class Base {
public:
bool foo() const {
if (NULL == internalFoo) {
// base implementation;
} else {
return internalFoo();
}
}
private:
bool (*internalFoo)() = NULL;
}
class Derived : public Base{
public:
bool foo() const;
}