在PHP中所有无专用功能是虚拟的,所以没有必要明确地声明为虚。
声明一个成员函数作为abstract
简单地意味着该基类不能提供一个实现,但所有派生类应该。定义方法为抽象相同做以下用C++
virtual void foo() = 0;
它只是意味着派生类必须实现foo();
编辑:关于修改的问题
b::call()
无法访问a::test()
。因为这个原因,当调用私有函数时,只会调用它被调用的类中的函数。
EDIT: 关于评论:
(来自Wikipieda)
在面向对象的编程中,虚拟函数或虚拟方法是一个函数或方法,其行为可以在被覆盖具有相同签名的函数的继承类。
由于在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
}
变化巴兹是虚拟
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()
是虚拟的或不如预期的类型是已知的(程序员显式提供它)
感谢您的演示,我明白了什么虚指now.But能你也用PHP来证明它?因为在PHP中似乎不可能将对象转换为基类,换句话说,在PHP中不存在虚拟这样的概念? – user198729 2010-03-21 16:40:01
在虚拟中没有这样的概念。或者相反,每个方法都是虚拟的,因为在运行时查找实际实现。 – VolkerK 2010-03-21 16:52:45
我认为在PHP中没有虚拟概念会更好,因为用这种语言来做这件事是不可能的:'Foo * f = new Bar();' – user198729 2010-03-21 16:57:50