日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

笔记1——C++多态与Java多态的异同

發布時間:2025/3/21 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 笔记1——C++多态与Java多态的异同 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近參加網易筆試遇到一個問題,考察了C++ 多態特性,自己查了相關資料學習了相關用法。

一般程序調用的函數地址是在編譯期決定了,但是具有多態特性的函數調用地址是在程序運行期才決定。

C++與Java多態的區別

  • 子類重寫父類的函數,程序運行時根據不同對象執行相應函數

  • C++中子類只有重寫父類的virtual函數時,此函數才具備多態特性


來兩個簡單列子說明:

C++

#include <iostream>class A{public:virtual void f(){std::cout << "A " << std::endl;}void f1(){std::cout << "A1 " << std::endl;} };class B : public A{public:void f(){std::cout << "B " << std::endl;}void f1(){std::cout << "B1 " << std::endl;} };int main(int argc, char *argv[]) {//多態特性的考察A *pa = new A();pa->f();B *pb = (B *)pa;pb->f();delete pa,pb;pa = new B();pa->f();pb = (B *)pa;pb->f();//非多態特性的考察pa = new A();pa->f1();pb = (B *)pa;pb->f1();delete pa,pb;pa = new B();pa->f1();pb = (B *)pa;pb->f1();return 0; }

程序結果

  • A A B B
  • A1 B1 A1 B1

多態性的考察中,第一個父類指針pa指向了父類對象A,故調用了父類對象A中的方法;第二個雖說將父類對象強制轉換成了子類對象,但實際上子類指針指向的仍是父類對象;第三個父類指針指向了子類對象B,故調用子類對象B中的方法;第四個子類指針指向的仍然是子類對象B,故調用了子類對象B中的方法。

非多態性的考察中,主要看編譯時指針是哪種類型的指針,故調用的就是相應類型的方法。

Java

class A {public void f(){System.out.println("A");} }class B extends A {public void f(){System.out.println("B");} }public class Test {public static void main(String[] args){A a = new A();a.f();a = new B();a.f();} }

程序結果:A B

總結

以上是生活随笔為你收集整理的笔记1——C++多态与Java多态的异同的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。