java与C++的虚函数比较
class base
{
private void print()
{
System.out.println("base");
}
public void doprint()
{
print();
}
}
class derive extends base
{
private void print()
{
System.out.println("derive");
}
}
class testVirtual
{
public static void main(String args[])
{
base b = new derive();
b.doprint();
}
}
运行结果:base
----------------------------------------------------------------------------
c++例子
class base
{
private:
virtual void print()
{
printf("base\n");
}
public:
void doprint()
{
print();
}
virtual ~base(){}
};
class derived : public base
{
virtual void print()
{
printf("derived\n");
}
};
int main(int argc, char* argv[])
{
derived d;
base& b = d;
b.doprint();
return 0;
}
运行结果:
derived
----------------------------------------------------------------
如果将上面JAVA中的private改为public, 则运行结果为derived
通过上面的例子, 应该可以看出C++与JAVA的虚函数异同点.
网上还有人把这二者的总结用下面的对比描述了一下:
C++ Java
虚函数 -------- 普通函数
纯虚函数 -------- 抽象函数
抽象类 -------- 抽象类
虚基类 -------- 接口
我觉得还是很贴切.