Đề 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

pdf8 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 1725 | Lượt tải: 0download
Tóm tắt nội dung Đề tài Điểm giống, khác nhau của C++, C#, Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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:

  • pdfĐề tài Điểm giống, khác nhau của C++, C#, Java.pdf
Tài liệu liên quan