posts - 82, comments - 269, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

C++与JAVA在多态与覆盖上的区别(一点猜测)

Posted on 2006-11-16 20:28 itspy 阅读(1597) 评论(6)  编辑  收藏 所属分类: JAVA技术

本人对JAVA有一定的了解,最近开始看一些C++的东西,遇到了JAVA与C++的如下不同点:就是JAVA与C++在覆盖或者是多态性上不太一样。

现写了两块代码证明如下,至于为什么会有如此原因,我也不明白,希望有能懂C++与JAVA的人能出来讲解一下。

#include <stdio.h>
#include  "iostream.h"

class Base{
 public: void show(){
 cout<<"Base";
 }

};

class ExBase : public Base
{
 public: void show(){
 cout<<"ExBase";
 }
 
 public: void showEnd(){
  cout<<"EndClass";
 }
};

void main(){
 Base  * base= new ExBase(); 
 base->show();//打印Base 
 
};

 

//文件一
package test;

public class Base {
 static   String abc="abc";

 public void show() {
  System.out.print("base");
 }

}

//文件二
package test;
public class ExBase extends Base {

 public void show() {
  System.out.print("TestBase");
 }
}


//文件三
package test;
public class Test {

 public static void main(String[] args) {
  Base base = new ExBase();
  base.show();//打印Base
 }
}
最后运行打印出来的是“TestBase”,也就是子类的函数起作用了。


按照相同的思路,我写了如下的C++代码:

//文件四
#include <stdio.h>
#include  "iostream.h"

class Base{
 public: void show(){
 cout<<"Base";
 }

};

class ExBase : public Base
{
 public: void show(){
 cout<<"ExBase"; 

};

void main(){
 Base  * base= new ExBase(); 
 base->show();//打印Base 
 
};
结果起作用的却是父类的代码,最后打印出来的是“Base”

 


他们都是子类覆盖了父内的函数,但是通用时却通过父类来调用。为什么类似的结构却产生了不同的结果,到底是因为C++与JAVA哪方面的不同产生的。


评论

# re: C++与JAVA在多态与覆盖上的区别(一点猜测)  回复  更多评论   

2006-11-16 21:15 by mul
java的普通函数(非final)默认多态;
c++使用virtual表示虚函数来实现多态;
所以java的例子表现为多态性,c++的例子只是普通函数调用而已。

# re: C++与JAVA在多态与覆盖上的区别(一点猜测)  回复  更多评论   

2006-11-16 21:40 by itspy
楼上正解,我也刚找到相关资料。C++要表现为多态,一定要用virtual.

又学习了一小步,争取每天一小步。

# re: C++与JAVA在多态与覆盖上的区别(一点猜测)  回复  更多评论   

2006-11-17 08:56 by dudu
建议使用摘要方式发布!

# re: C++与JAVA在多态与覆盖上的区别(一点猜测)  回复  更多评论   

2006-11-17 10:38 by 小锋
你的C++函数不具有多态性!也就无所谓区别可言。

# re: C++与JAVA在多态与覆盖上的区别(一点猜测)  回复  更多评论   

2006-11-17 17:20 by ....
老兄,你这也叫多态?看来你还应该加强OO方面的认识哦.

# re: C++与JAVA在多态与覆盖上的区别(一点猜测)  回复  更多评论   

2006-11-17 20:55 by itspy
谢谢各位指点,我这不是在学习嘛.

或者是我描述的不太清楚,望各位多多指点.

只有注册用户登录后才能发表评论。


网站导航: