在 PHP 中,所有非私有函数都是虚拟的,因此无需将它们显式声明为虚拟。
简单地声明一个成员函数abstract
意味着基类不能提供实现,但所有派生类都应该提供。将方法定义为抽象方法与在 C++ 中执行以下操作相同
virtual void foo() = 0;
这仅仅意味着派生类必须实现foo();
编辑:关于编辑的问题
b::call()
无法访问a::test()
。因此,在调用私有函数时,只会调用调用它的类中的那个。
编辑:关于评论:
(来自维基百科)
在面向对象的编程中,虚函数或虚方法是一种函数或方法,其行为可以在继承类中被具有相同签名的函数覆盖。
由于明确说明您在 C++ 中支付的费用的想法,您必须将函数声明为虚拟函数以允许派生类覆盖函数。
class Foo{
public:
void baz(){
std::cout << "Foo";
}
};
class Bar : public Foo{
public:
void baz(){
std::cout << "Bar";
}
};
int main(){
Foo* f = new Bar();
f->baz(); //baz is not virtual in Foo, so the output is Foo
}
将 baz 更改为虚拟
class Foo{
public:
virtual void baz(){
std::cout << "Foo";
}
};
//Same Bar declaration
int main(){
Foo* f = new Bar();
f->baz(); //baz is virtual in Foo, so the output is Bar as it will call the derived function
}
f
请注意,如果上面示例中的变量是类型的Bar*
,或者Bar
它是否Foo::baz()
是虚拟的,因为预期的类型是已知的(程序员明确提供了它)