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

