c++与java的对话:1.私有虚函数
我是一名既用c++又用java的程序员,在C++编程中我体验到了的高效、灵活,模板容器类和function object用起来非常方便,同时又体验到了c++的复杂与不直观,读c++代码时常常被隐式类型转换和操作符重载误导。使用java的过程中我感受到了简单、直观的快乐,不用考虑悬挂指针和内存释放,使我的大量思考时间可以集中于设计方面,finally的添加可以在出现异常时很方便的释放资源,然而java没有泛型和多重继承,使用容器类时我需要一次次的从Object进行强制类型转换,多个接口的adapter模式也不得不使用内部类。
在两种语言的使用中,我发现了很多微妙的区别,我想也许正是这些区别使得两种语言平台能够共存并且适用于不同应用层次。于是我决定将我编程中所遇到的区别以一个C++例子,一个java例子相互对照的方式展现出来,供各位程序员同行加深两种语言平台的理解,并且在不同应用领域选择最适合的语言平台。
私有虚函数
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例子
class base
{
private void print()
{
System.out.println("base");
}
public void doprint()
{
print();
}
}
public class derive extends base
{
private void print()
{
System.out.println("derive");
}
public static void main(String args[])
{
base b = new derive();
b.doprint();
}
}
运行结果:
base
评论:
我想之所以出现两种不同的结果就是因为java要保持一种直观的特性,使程序员不会对程序产生误解。所以java的私有函数可能不是虚拟的,不知道解释得是否正确,请各位同行指正。
我的联系方式如下,欢迎各位来e-mail讨论。