posts - 82, comments - 269, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          本人對JAVA有一定的了解,最近開始看一些C++的東西,遇到了JAVA與C++的如下不同點(diǎn):就是JAVA與C++在覆蓋或者是多態(tài)性上不太一樣。

          現(xiàn)寫了兩塊代碼證明如下,至于為什么會有如此原因,我也不明白,希望有能懂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
          ?}
          }
          最后運(yùn)行打印出來的是“TestBase”,也就是子類的函數(shù)起作用了。


          按照相同的思路,我寫了如下的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?
          ?
          };
          結(jié)果起作用的卻是父類的代碼,最后打印出來的是“Base”

          ?


          他們都是子類覆蓋了父內(nèi)的函數(shù),但是通用時(shí)卻通過父類來調(diào)用。為什么類似的結(jié)構(gòu)卻產(chǎn)生了不同的結(jié)果,到底是因?yàn)镃++與JAVA哪方面的不同產(chǎn)生的。


          評論

          # re: C++與JAVA在多態(tài)與覆蓋上的區(qū)別(一點(diǎn)猜測)  回復(fù)  更多評論   

          2006-11-16 21:15 by mul
          java的普通函數(shù)(非final)默認(rèn)多態(tài);
          c++使用virtual表示虛函數(shù)來實(shí)現(xiàn)多態(tài);
          所以java的例子表現(xiàn)為多態(tài)性,c++的例子只是普通函數(shù)調(diào)用而已。

          # re: C++與JAVA在多態(tài)與覆蓋上的區(qū)別(一點(diǎn)猜測)  回復(fù)  更多評論   

          2006-11-16 21:40 by itspy
          樓上正解,我也剛找到相關(guān)資料。C++要表現(xiàn)為多態(tài),一定要用virtual.

          又學(xué)習(xí)了一小步,爭取每天一小步。

          # re: C++與JAVA在多態(tài)與覆蓋上的區(qū)別(一點(diǎn)猜測)  回復(fù)  更多評論   

          2006-11-17 08:56 by dudu
          建議使用摘要方式發(fā)布!

          # re: C++與JAVA在多態(tài)與覆蓋上的區(qū)別(一點(diǎn)猜測)  回復(fù)  更多評論   

          2006-11-17 10:38 by 小鋒
          你的C++函數(shù)不具有多態(tài)性!也就無所謂區(qū)別可言。

          # re: C++與JAVA在多態(tài)與覆蓋上的區(qū)別(一點(diǎn)猜測)  回復(fù)  更多評論   

          2006-11-17 17:20 by ....
          老兄,你這也叫多態(tài)?看來你還應(yīng)該加強(qiáng)OO方面的認(rèn)識哦.

          # re: C++與JAVA在多態(tài)與覆蓋上的區(qū)別(一點(diǎn)猜測)  回復(fù)  更多評論   

          2006-11-17 20:55 by itspy
          謝謝各位指點(diǎn),我這不是在學(xué)習(xí)嘛.

          或者是我描述的不太清楚,望各位多多指點(diǎn).
          主站蜘蛛池模板: 镇雄县| 苍溪县| 西充县| 漠河县| 余姚市| 大城县| 祁连县| 江达县| 淮南市| 西乌珠穆沁旗| 泸定县| 凤山市| 旬邑县| 龙陵县| 黄平县| 普洱| 麻江县| 普定县| 枣庄市| 洪洞县| 清水县| 千阳县| 长汀县| 勐海县| 商河县| 尼勒克县| 岫岩| 宜城市| 连南| 辽阳县| 色达县| 吉木萨尔县| 清丰县| 高雄市| 桦川县| 德化县| 辽中县| 舟山市| 常山县| 凤台县| 抚远县|