Đề tài Điểm giống, khác nhau của C++, C#, Java
Điểm giống, khác nhaucủa C++(sinh viên có thểsửdụng trình
biêndịch VS 6.0 hay BC++ 3.1 ), C#, Java ở cácvấn đề sau:
o Chú thích
oHằng
o Kiểudữ liệu
o Kiểm tra kiểu, đổi kiểu
o Không gian tên
o Quản lý vàcấp phátbộ nhớ
o Hàm trùng tên
o Nhập xuất
rface, ph¬ng thøc vµ biÕn. PhÇn chó thÝch trong t liÖu ®îc b¾t ®Çu b»ng /** vµ kÕt thóc b»ng */. 2. Hằng: Hằng là một giá trị bất biến trong chương trình, không thay đổi, không biến đổi. Hằng cũng là một biến nhưng giá trị của hằng không thay đổi. Hằng được phân thành ba loại: giá trị hằng (literal) - các số nguyên, số thực, các ký tự…; biểu tượng hằng (symbolic constants) - dùng đặt tên cho hằng giống như tên biến…; kiểu liệu kê (enumerations) - kiểu liệt kê đơn giản là tập hợp các tên hằng có giá trị không thay đổi. - Cú pháp: const = ; hoặc #define Bảng so sánh các đặc trưng khác của C++, C# và Java: C++ C# Java 3. K iể u dữ li ệu G i ố n g - Kiểu dữ liệu của một đối tượng là một tín hiệu để trình biên dịch nhận biết kích thước của một đối tượng (kiểu int có kích thước là 4 byte) và khả năng của nó (như một đối tượng button có thể vẽ, phản ứng khi nhấn,...). - Có hai tập hợp kiểu dữ liệu chính: Kiểu xây dựng sẵn (built- in) mà ngôn ngữ cung cấp cho người lập trình và kiểu được người dùng định nghĩa (user-defined) do người lập trình tạo ra. Các kiểu dữ liệu built-in: Tên Mô tả Miền giá trị char ký tự hay kiểu số nguyên có dấu: -128 to 127 không dấu: 0 to 255 short kiểu số nguyên có dấu: -32763 to 32762 không dấu: 0 to 65535 long kiểu số nguyên có dấu:-2147483648 to 2147483647 không dấu: 0 to 4294967295 int Số nguyên. Độ dài của nó phụ thuộc vào hệ thống, như trong MS- DOS nó là 16-bit, trên Windows 9x/2000/NT là 32 bit... Xem short, long float Dạng dấu phẩy động 3.4e + / - 38 (7 digits) double Dạng dấu phẩy động với độ chính xác gấp đôi 1.7e + / - 308 (15 digits) long double Dạng dấu phẩy động với độ chính xác hơn nữa 1.2e + / - 4932 (19 digits) bool Giá trị logic. Nó mới được thêm vào chuẩn ANSI-C++. Bởi vậy không phải tất cả các trình dịch đều hỗ trợ nó true hoặc false void Kiểu trống sử dụng cho những hàm không trả về giá trị. K h á c Kích thước: - char: 1 byte - short: 2 byte - long: 4 byte - int: 2 byte - float: 4 byte - double: 8 byte - long double: 10 byte - bool: 1 byte * Có khái niệm unsigned (không dấu). - C# phân tập hợp kiểu dữ liệu này thành hai loại: Kiểu dữ liệu giá trị (value) và kiểu dữ liệu tham chiếu (reference). Việc phân chia này do sự khác nhau khi lưu kiểu dữ liệu giá trị và kiểu dữ liệu tham chiếu trong bộ nhớ. Đối với một kiểu dữ liệu giá trị thì sẽ được lưu giữ kích thước thật trong bộ nhớ đã cấp phát là stack. Trong khi đó thì địa chỉ của kiểu dữ liệu tham chiếu thì được lưu trong stack nhưng đối tượng thật sự thì lưu trong bộ nhớ heap. - Ghi chú: Tất cả các kiểu dữ liệu xây dựng sẵn là kiểu dữ liệu giá trị ngoại trừ các đối tượng và chuỗi. Và tất cả các kiểu do người dùng định nghĩa ngoại trừ kiểu cấu trúc đều là kiểu dữ liệu tham chiếu. Kích thước các kiểu dữ liệu cơ bản giống như của C++. Kích thước: - char: 2 byte - short: 2 byte - long: 8 byte - int: 4 byte - float: 4 byte - double: 8 byte - long double: 10 byte - bool: 1 byte * Không có khái niệm unsigned. 4. K iể m tr a ki ểu , đ ổi k iể u G i ố n g - Xét biểu thức x + i trong đó x có kiểu float và i có kiểu int. Vì biểu diễn các số nguyên, số thực khác nhau trong máy tính do đó các chỉ thị máy khác nhau được dùng cho số thực và số nguyên. Trình biên dịch có thể thực hiện việc chuyển đổi kiểu để hai toán hạng có cùng kiểu khi phép toán cộng xảy ra. Bộ kiểm tra kiểu trong trình biên dịch có thể được dùng để thêm các phép toán biến đổi kiểu vào trong biểu diễn trung gian của chương trình nguồn. Chẳng hạn ký hiệu hậu tố của x + i có thể là: x i inttoreal float+ Trong đó: inttoreal đổi số nguyên i thành số thực, float+ thực hiện phép cộng các số thực. - Sự ép buộc chuyển đổi kiểu: Sự chuyển đổi từ kiểu này sang kiểu khác được gọi là ẩn (implicit) nếu nó được làm một cách tự động bởi chương trình dịch. Chuyển đổi kiểu ẩn còn gọi là ép buộc chuyển đổi kiểu (coercions). - Với khai báo x là một mảng các số thực thì lệnh for (i=1;i<=n;i++) x[i]:=1 thực hiện trong 48,4 micro giây còn lệnh for (i=1;i<=n;i++) x[i]:=1.0 thực hiện trong 5,4 micro giây. Sở dĩ như vậy vì mã phát sinh cho lệnh thứ nhất chứa một lời gọi thủ tục đổi số nguyên thành số thực tại thời gian thực hiện. - Ta dùng đoạn code sau để ép kiểu cho class (ép từ class về kiểu cơ sở): class { tênbiến; public: … operator () { …. return ; } } - Ép từ 1 kiểu có sẵn về một class (lớp) chính là kiểu dữ liệu mà ta định nghĩa: chúng ta có hai cách là dùng hàm bạn(friend) để ép kiểu và dùng hàm tạo (constructor) để ép kiểu. class { tênbiến; public: … ( ) { cout<<”ép kiểu dữ liệu có sẵn về kiểu lớp”; } } K h á c C++ cũng giống như nhiều ngôn ngữ lập trình khác, ngoài cơ chế ép kiểu tường minh còn sử dụng cơ chế ép kiểu mặc định: - Đối với các kiểu dữ liệu dựng sẵn, giá trị của kiểu hẹp hơn (chiếm số byte ít hơn) có thể chuyển sang những kiểu rộng Giống C++ Giống C++ hơnà được gọi là mở rộng kiểu. char ↓ byteàshortàintà longàfloatàdouble G i ố n g Để tạo namespace ta dùng: namespace { // Các class } Để sử dụng một namespace ta dùng: using namespace ; // trong C++ using ; // trong C# 5. K hô ng g ia n tê n K h á c Trong Java không có khái niệm không gian tên nhưng khái niệm tương tự nó là package, mọi class trong Java đều chứa trong một package. Để tạo một package ta dùng: package ; Để sử dụng một package ta dùng: import ; 6. Q uả n lý cấ p ph át b ộ nh ớ G i ố n g - Cấp phát bộ nhớ động cho biến: * pointName; =new ; giải phóng bằng: delete pointName; - Cấp phát bộ nhớ cho mảng động một chiều: =new [size]; ->giải phóng bằng delete []; - Cấp phát bộ nhớ cho mảng động hai chiều (là một con trỏ trỏ đến một con trỏ): ** ; =new *[size1]; for(int i=0;i<size1;i++) [i]=new[size2]; ->giải phóng từng con trỏ hàng (cột) K h á c Trong C++ có thể sử dụng các hàm cấp phát bộ nhớ động của C như: hàm malloc để cấp phát bộ nhớ, hàm free để giải phóng bộ nhớ được cấp phát. Giống Java Java cài đặt cơ chế “Garbage collection” để giải phóng tự động các đối tượng không còn cần thiết. G i ố n g - Ta có thể xây dựng nhiều các phương thức (hàm) cùng tên nhưng nhận các tham số khác nhau về số lượng, về kiểu dữ liệu của tham số… - Không thể xây dựng hai hàm “chỉ” khác nhau về giá trị trả về vì khi đó trình biên dịch sẽ báo lỗi. - Khi gọi hàm, trình biên dịch dựa vào đặc tính tham số của hàm gọi mà kích hoạt hàm thích hợp đã được khai báo. 7. H àm tr ùn g tê n K h á c 8. Nhập xuất: Với C++ a/ Dßng cin vµ to¸n tö nhËp: C¸ch dïng to¸n tö nhËp ®Ó ®äc d÷ liÖu tõ dßng cin nh sau: cin >> Tham_sè ; Trong ®ã Tham_sè cã thÓ lµ: - BiÕn hoÆc phÇn tö m¶ng nguyªn ®Ó nhËn mét sè nguyªn. - BiÕn hoÆc phÇn tö m¶ng thùc ®Ó nhËn mét sè thùc. - BiÕn hoÆc phÇn tö m¶ng ký tù ®Ó nhËn mét ký tù. - Con trá ký tù ®Ó nhËn mét dÉy c¸c ký tù kh¸c trèng. Chó ý: C¸c to¸n tö nhËp cã thÓ viÕt nèi ®u«i ®Ó nhËp nhiÒu gi¸ trÞ trªn mét dßng lÖnh nh sau: cin >> Tham_sè_1 >> Tham_sè_2 >> ... >> Tham_sè_k ; C¸ch thøc nhËp nh sau: Bá qua c¸c ký tù tr¾ng (dÊu c¸ch, dÊu tab, dÊu chuyÓn dßng) ®øng tríc nÕu cã vµ sau ®ã ®äc vµo c¸c ký tù t¬ng øng víi kiÓu yªu cÇu. Cô thÓ ®èi víi tõng kiÓu nh sau: Khi nhËp sè nguyªn sÏ bá qua c¸c ký tù tr¾ng ®øng tríc nÕu cã, sau ®ã b¾t ®Çu nhËn c¸c ký tù biÓu thÞ sè nguyªn. ViÖc nhËp kÕt thóc khi gÆp mét ký tù tr¾ng hoÆc mét ký tù kh«ng thÓ hiÓu lµ thµnh phÇn cña sè nguyªn. VÝ dô nÕu trªn dßng vµo (gâ tõ bµn phÝm) chøa c¸c ký tù 123X2 vµ Tham_sè (bªn ph¶i cin) lµ biÕn nguyªn n th× n sÏ nhËn gi¸ trÞ 123. Con trá nhËp sÏ dõng t¹i ký tù X. PhÐp nhËp mét sè thùc còng tiÕn hµnh t¬ng tù: Bá qua c¸c kho¶ng tr¾ng ®øng tríc nÕu cã, sau ®ã b¾t ®Çu nhËn c¸c ký tù biÓu thÞ sè Thùc. ViÖc nhËp kÕt thóc khi gÆp mét ký tù tr¾ng hoÆc mét ký tù kh«ng thÓ hiÓu lµ thµnh phÇn cña sè thùc. PhÐp nhËp mét ký tù còng vËy: Bá qua c¸c kho¶ng tr¾ng ®øng tríc nÕu cã, sau ®ã nhËn mét ký tù kh¸c ký tù tr¾ng. VÝ dô nÕu gâ XY th× ký tù X ®îc nhËn vµ con trá nhËp dõng t¹i ký tù Y. PhÐp nhËp mét dÉy ký tù: Bá qua c¸c kho¶ng tr¾ng ®øng tríc nÕu cã, sau ®ã b¾t ®Çu nhËn tõ mét ký tù kh¸c ký tù tr¾ng. ViÖc nhËp kÕt thóc khi gÆp mét ký tù tr¾ng. b/ To¸n tö xuÊt: C++ ®Þnh nghÜa chång to¸n tö dÞch tr¸i << ®Ó göi c¸c ký tù ra dßng xuÊt. C¸ch dïng to¸n tö xuÊt ®Ó xuÊt d÷ liÖu tõ bé nhí ra dßng cout nh sau: cout << Tham_sè ; Trong ®ã Tham_sè biÓu thÞ mét gi¸ trÞ cÇn xuÊt ra mµn h×nh. Gi¸ trÞ sÏ ®îc biÕn ®æi thµnh mét dÉy ký tù tríc khi ®a ra dßng xuÊt. KiÓu cña Tham_sè cã thÓ nh sau: - Nguyªn (xuÊt gi¸ trÞ nguyªn) - Thùc (xuÊt gi¸ trÞ thùc) - ký tù - char (xuÊt mét ký tù) - con trá ký tù - char* (xuÊt chuçi ký tù) Chó ý: C¸c to¸n tö xuÊt cã thÓ viÕt nèi ®u«i nhau (®Ó xuÊt nhiÒu gi¸ trÞ) trªn mét dßng lÖnh nh sau: cout << Tham_sè_1 << Tham_sè_2 << ... << Tham_sè_k ; Chó ý: To¸n tö xuÊt ®îc ®Þnh nghÜa chång (trïng tªn) víi to¸n tö dÞch tr¸i vµ nã cïng cã møc ®é u tiªn nh to¸n tö dÞch tr¸i. Chóng ta ®· biÕt to¸n tö xuÊt cã thø tù u tiªn lín h¬n c¸c to¸n tö trong biÓu thøc ®iÒu kiÖn. V× vËy nÕu dïng to¸n tö xuÊt ®Ó in mét biÓu thøc ®iÒu kiÖn nh sau: int a=5, b=10; cout b?a:b ; th× tr×nh biªn dÞch sÏ b¸o lçi. §Ó tr¸nh lçi cÇn dïng c¸c dÊu ngoÆc trßn ®Ó bao biÓu thøc ®iÒu kiÖn nh sau: int a=5, b=10; cout b?a:b) ; Tãm l¹i: Nªn bao c¸c biÓu thøc trong 2 dÊu ngoÆc trßn. Với Java, dữ liệu được nhập xuất nhờ “luồng” vào ra chuẩn System.in và System.out
File đính kèm:
- Đề tài Điểm giống, khác nhau của C++, C#, Java.pdf