摘要:但是在中就只是聲明,但是還沒有分配空間,中的才是分配了內存的。對于語言會報錯這樣是對的詳細說明原因只能是或者是沒有這個是中的語法,所以要區分和的語法和機制如果用聲明了對象會報錯這才是正確的語法
C++中創建對象的兩種語法
在c++的類中,我如果要訪問類中的成員變量或函數,有2種方法,第一種就是定義一個一個對象,如:
Class A ... A aa; aa.xxx();
另外一種就是
Class B ... B *aa = new B(); aa->xxx();Java、C++、Delphi中創建對象
在java中,A a = new A();等同于c++中的 A a;
另外在c++中還有另外一種聲明和實例化就是使用指針,如:A* a= new A();,在Java中沒有對應的形式,最重要的原因是C++中的這種聲明形式的內存是需要程序員手動管理的,但是Java有內存回收機制,不需要程序員關心對象的內存的問題。
上面是從內存回收的角度看,這時候:在java中,A a = new A();等同于c++中的 A a;
但是假如從創建對象的時間來看:在java中,A a = new A();也可以看成等同于c++中的 A *a = New A();
c++中的A a;就已經構造了對象。但是在java中 A a; 就只是聲明,但是還沒有分配空間,java中的A a = new A()才是分配了內存的。而C++中的A *a;也只是聲明了一個指針,但是還沒有分配指針,a = new A();才是創建了一個實體,并且另指針a指向這個實體的內存地址!
再說說Delphi,假如有一個類ClassA,然后聲明一個對象,代碼大概如下:
var ObjectA: ClassA; //這里只是聲明了一個變量名,Delphi中變量名其實就是一個指針,此時并沒有分配空間 begin ObjectA:= ClassA.Create; //這里才是創建了一個內存實體,分配了內存空間,并且令ObjectA指向這塊內存地址 //注意這里的語法格式不同于C++的ClassA *ObjectA = new ClassA(); //也不同于Java的ClassA ObjectA = new ClassA(); //注意區別三者的語法格式的不同 end;
在Delphi的面向對象的語法中,要注意理解Delphi對象名與對象實體的本質區別,一個Delphi的對象的對象名其實本質上就是一個指針,指向內存中的對象實體。
C++的靜態與動態內存分配在C++中就非常的靈活,A a;是在棧(stack)上分配空間,是靜態的。而A * a= new A;是在堆(heap)上分配空間,是動態的。棧上空間自動回收,堆空間需要程序員手動回收
靜態分配內存適合于編譯時就已經可以確定需要占用內存多少的情況,而在編譯時不能確定內存需求量時可使用動態分配內存;但靜態分配內存的運行效率要比動態分配內存的效率要高,因為動態內存分配與釋放需要額外的開銷;動態內存管理水平嚴重依賴于程序員的水平,如果處理不當容易造成內存泄漏。
動、靜態內存分配比較可以知道動態內存分配相對于靜態內存分配的特點:
1)不需要預先分配存儲空間;
2)分配的空間可以根據程序的需要擴大或縮小。
對于C++語言:
A a =new A(); //會報錯 A *a=new A(); //這樣是對的
詳細說明原因:
//只能是 A a; //或者是 A *a = new A(); //沒有 A a = new A(); //這個是Java中的語法,所以要區分C++和Java的語法和機制
如果用A* a = new A();聲明了對象
a.run(); //會報錯 a->run(); //這才是正確的語法
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64485.html
摘要:靜態變量是被泛型類的所有實例所共享的。所以引用能完成泛型類型的檢查。對于這個類型系統,有如下的一些規則相同類型參數的泛型類的關系取決于泛型類自身的繼承體系結構。事實上,泛型類擴展都不合法。 前言 和C++以模板來實現靜多態不同,Java基于運行時支持選擇了泛型,兩者的實現原理大相庭徑。C++可以支持基本類型作為模板參數,Java卻只能接受類作為泛型參數;Java可以在泛型類的方法中取得...
摘要:老實說,當時一進入世界的大門就暈了,各種規范概念和英文縮寫詞能把人整的暈暈乎乎。等新的英文縮寫又出現了,一口老血還沒來得及噴出,又重新振作開始新的學習征程。 showImg(http://upload-images.jianshu.io/upload_images/1131767-1c5d16e39435df10.jpg?imageMogr2/auto-orient/strip%7Ci...
摘要:效率比較低,依賴解釋器,跨平臺性好語言編譯執行過程下面都是鳥哥博客的內容深入理解原理之引擎對這個文件進行詞法分析,語法分析,編譯成,然后執行。 編譯型語言和解釋型語言 從PHP,Java和C語言的編譯執行過程可以先解釋下編譯型語言和解釋型語言。 編譯型語言 程序在執行之前需要一個專門的編譯過程,把程序編譯成為機器語言的文件,運行時不需要重新翻譯,直接使用編譯的結果就行了。程序執行效率高...
摘要:效率比較低,依賴解釋器,跨平臺性好語言編譯執行過程下面都是鳥哥博客的內容深入理解原理之引擎對這個文件進行詞法分析,語法分析,編譯成,然后執行。 編譯型語言和解釋型語言 從PHP,Java和C語言的編譯執行過程可以先解釋下編譯型語言和解釋型語言。 編譯型語言 程序在執行之前需要一個專門的編譯過程,把程序編譯成為機器語言的文件,運行時不需要重新翻譯,直接使用編譯的結果就行了。程序執行效率高...
閱讀 1432·2021-11-25 09:43
閱讀 2029·2021-07-26 23:38
閱讀 741·2019-08-30 15:53
閱讀 2280·2019-08-30 15:43
閱讀 1168·2019-08-29 18:40
閱讀 1970·2019-08-26 13:28
閱讀 1975·2019-08-23 18:20
閱讀 543·2019-08-23 15:07