Đề tài Điểm giống và khác nhau giữa C++, C# và Java

Các chú thích được các lập trình viên sử dụng để ghi chú hay mô tả trong các phần

của chương trình.

 Trong C++ có hai cách để chú thích:

// Chú thích theo dòng

/* Chú thích theo khối */

 Ngoài hai kiểu chú thích trên giống trong C++ thì C# còn hỗ trợ thêm kiểu

thứ ba cũng là kiểu cuối cùng, kiểu này chứa các định dạng XML nhằm xuất

ra tập tin XML khi biên dịch để tạo sưu liệu cho mã nguồn.

 Ngoài chú thích 2 kiểu giống C++ và C#,Java còn cung cấp kiểu chú thích

thứ 3:

/** documentation */: Công cụ javadoc trong bộ JDK sử dụng chú thích này

để chuẩn bị cho việc tự động phát sinh tài liệu.

pdf8 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 2706 | Lượt tải: 4download
Tóm tắt nội dung Đề tài Điểm giống và khác nhau giữa C++, C# và Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
chúng là các hằng mang giá trị số. Chú ý rằng khi biểu diễn một hằng kiểu 
số,chúng ta không cần viết dấu ngoặc kép hay bất kì dấu hiệu nào khác. 
Thêm vào những số ở hệ cơ số 10 ( cái mà tất cả chúng ta đều đã biết) C++ còn 
cho phép sử dụng các hằng số cơ số 8 và 16. Để biểu diễn một số hệ cơ số 8 chúng 
ta đặt trước nó kí tự 0, để biễu diễn số ở hệ cơ số 16 chúng ta đặt trước nó hai kí tự 
0x. Ví dụ: 
75 // Cơ số 10 
0113 // cơ số 8 
0x4b // cơ số 16 
 Các số thập phân (dạng dấu phẩy động): 
Chúng biểu diễn các số với phần thập phân và/hoặc số mũ. Chúng có thể 
bao gồm phần thập phân, kí tự e (biểu diễn 10 mũ...). 
3.14159 // 3.14159 
6.02e23 // 6.02 x 10
23
1.6e-19 // 1.6 x 10
-19
3.0 // 3.0 
 Kí tự và xâu kí tự: 
Trong C++ còn tồn tại các hằng không phải kiểu số như: 
'z' 
'p' 
"Hello world" 
"How do you do?" 
 3.Kiểu dữ liệu: 
C++, C#, hay Java chia thành hai tập hợp kiểu dữ liệu chính: 
 Kiểu xây dựng sẵn(kiểu cơ sở) : mà ngôn ngữ cung cấp cho người lập trình 
 Kiểu được người dùng định nghĩa: do người lập trình tạo ra. 
Ngoài ra 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 chi 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ớ đa 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. 
 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. 
Đa số các kiểu dữ liệu trong C++,C#,và Java là tương đối giống nhau chỉ khác 
nhau ở một vài điểm đáng lưu ý sau: 
a.Kiểu xây dựng sẵn: 
 C# có kiểu dữ liệu rất hữu dụng và mở rộng hơn so với Java và C++.Với vài 
kiểu dữ liệu mới như: 
Kiểu C# Số byte Kiểu .NET Mô tả 
sbyte 1 sbyte Số nguyên có dấu (từ -128 đến 127) 
ushort 2 Uint16 Số nguyên không dấu 0 – 65.535 
decimal 8 Decimal Có độ chính xác đến 28 con số và giá 
trị thập phân, được dùng trong tính 
toán tài chính, kiểu này đoi hỏi phải 
có hậu tố “m” hay “M”theo sau giá 
trị. 
 Java không có kiểu liệt kê (enum), kiểu cấu trúc (struct) hay hợp (union), 
không như C++ và C# nó chỉ có class. Mọi biến hay hàm của Java đều nằm 
trong một class nào đó. 
 Trong Java, mọi biến không thuộc kiểu nguyên thuỷ đều phải tạo ra bằng từ 
khoá new. 
 Kiểu C++ JAVA C# 
Số nguyên int Dộ dài phụ thuộc 
hệ thống. 
Không có kiểu số 
nguyên không dấu 
như C++. 
Luôn có kích 
thước 4byte. 
Int luôn có kích 
thước 4 byte. 
Kiểu kí tự char Có kích thước 1 
byte 
Kích thước 2 byte, 
chỉ biểu diễn kí tự 
trong bộ mã 
Unicode. 
Giống Java. 
Kiểu giá trị logic Biến logic được 
gán giá trị 
nguyên(0 là false 
giá trị còn lại là 
true) 
Chỉ nhận 1 trong 2 
giá trị true hoặc 
false. 
Giống với Java. 
b.Kiểu dữ liệu người dùng xây dựng: 
 Kiểu mảng: 
Mảng là tập hợp nhiều phần tử có cùng tên, cùng kiểu dữ liệu và mỗi phần tử trong 
mảng được truy xuất thông qua chỉ số của nó trong mảng. 
Một chuỗi được xem như một mảng các ký tự khác, java và C# cung cấp một lớp 
String để làm việc với đối tượng dữ liệu chuỗi cùng khác thao tác trên đối tượng 
dữ liệu này. 
Không giống như trong C++ kích thước của mảng được xác định khi khai báo. 
 Chẳng hạn như: 
int arrInt[100]; // Khai báo náy trong Java sẽ bị báo lỗi. 
 Để cấp phát bộ nhớ cho mảng trong Java ta cần dùng từ khóa new. 
(Tất cả trong Java đều thông qua các đối tượng). Chẳng hạn để cấp 
phát vùng nhớ cho mảng trong Java ta làm như sau: 
int arrInt = new int[100]; 
Mảng trong C# có nhiều tính năng vượt trội hơn so với C++. Mảng được cấp phát 
bộ nhớ trong heap và do đó nó được truyền bằng tham chiếu. Bạn không thể truy 
xuất một phần tử vượt ngoài giới hạn trong một mảng (có chỉ số lớn hơn số 
phần tử trong mảng). Do đó C# đã khắc phục lỗi này. Ngoài ra C# còn cung cấp 
một số hàm trợ giúp để xử lý các phần tử trong mảng. Ta có thể thấy rõ sự khác 
nhau giữa cú pháp của mảng trong C++ và C# là: 
 Dấu ngoặc vuông được đặt sau tên kiểu chứ không phải sau tên biến. 
 Bạn có thể tạo vùng nhớ cho phần tử trong mảng bằng cách dùng từ 
khóa new. 
 Kiểu class: 
Trong C# và Java, class cũng tương tự như C++, ngoại trừ sự khác nhau về sự cấp 
phát bộ nhớ. Những đối tượng của class được cấp phát bộ nhớ trong heap và được 
tạo ra bằng cách dùng new. 
4.Kiểm tra kiểu, đổi kiểu: 
a.Kiểm tra kiểu: 
b.Chuyển đổi kiểu dữ liệu: Các toán tử chuyển đổi kiểu cho phép bạn chuyển đổi 
dữ liệu từ kiểu này sang kiểu khác. 
Có 2 loại đổi kiểu: 
 Đổi kiểu tường minh: trong C++,Java,C# đều có chung dạng cú pháp 
 = (kiểu_dữ_liệu) ; 
 Đổi giá trị ngầm định: được thực hiện một cách tự động . 
Tuy nhiên, nếu chuyển đổi từ kiểu nhỏ sang kiểu lớn (không mất mát thông 
tin) và ngược lại, từ kiểu lớn sang kiểu nhỏ (có khả năng mất mát thông tin). 
5.Không gian tên: 
a.Tên biến: 
Tên mà người lập trình chỉ định cho các kiểu dữ liệu, các phương thức, biến, 
hằng, hay đối tượng.... Một định danh phải bắt đầu với một ký tự chữ cái hay dấu 
gạch dưới, các ký tự còn lại phải là ký tự chữ cái, chữ số, dấu gạch dưới. 
Trong C++,C#,Java đều có sự giống nhau trong cách đặt tên. 
Tên không được trùng với các từ khoá mà C++, C#,và Java đưa ra, do đó chúng ta 
không thể tạo các biến có tên như class hay int được... Ngoài ra,C++, C#,và Java 
cũng phân biệt các ký tự thường và ký tự hoa. 
Vì vậy, hai biến bienNguyen và bienguyen là hoàn toàn khác nhau. 
Trong C++ và Java việc khai báo tên biến có thể thực hiện ở bất cứ đâu trong 
chương trình, và không bắt buộc phải gán giá trị.Nhưng với C# việc gán giá trị cho 
tên biến là bắt buộc(phải gán giá trị trước khi sử dụng). 
b.Namespace: 
Tạo các namespace để phân thành các vùng cho các lớp trùng tên không tranh chấp 
với nhau. 
C++,C#,Java đưa ra từ khóa using đề khai báo sử dụng namespace trong chương 
trình: 
using 
Để tạo một namespace dùng cú pháp sau: 
namespace 
{ 
..... 
} 
Namsespace sẽ hạn chế phạm vi của một tên, làm cho tên này chỉ có ý nghĩa trong 
vùng đã định nghĩa. 
Giả sử có một người nói Nam là một kỹ sư, từ kỹ sư phải đi kèm với một lĩnh vực 
nhất định nào đó, nếu không chúng ta sẽ không biết được là anh ta là kỹ sư lĩnh 
vực nào. Khi đó một lập trńh viên C# sẽ bảo rằng Nam là CauDuong.KySu phân 
biệt với CoKhi.KySu hay PhanMem.KySu. Namespace trong trường hợp này là 
CauDuong, CoKhi,PhanMem sẽ hạn chế phạm vi của những từ theo sau. Nó tạo ra 
một vùng không gian để tên sau đó có nghĩa. 
6.Quản lý và cấp phát bộ nhớ: 
Trong C++ có thể sử dụng hàm cấp phát động của C như: hàm malloc (để cấp phát 
bộ nhớ) và free (giải phóng bộ nhớ cấp phát). 
Ngoài ra C++, C#, Java còn đưa thêm toán tử new để cấp phát bộ nhớ. 
Cách cấp phát bộ nhớ như sau: 
 Trước hết khai báo một con trỏ chứa địa chỉ dược cấp phát. 
Kiểu *p;//Java không cung cấp kiểu dữ liệu này 
 Dùng toán tử new: 
p=new kiểu; 
Không như C++ cung cấp toán tử delete để giải phóng bộ nhớ động.C# và Java 
không có toán tử này.Thay vào đó,C# và Java cung cấp cơ chế “Garbage 
collection” để giải phóng tự động các đối tượng không còn cần thiết. 
 “Garbage collection” hoạt động như thế nào? 
 Sử dụng cơ chế đếm 
 Mỗi đối tượng có một số đếm các tham chiếu trỏ tới 
 Giải phóng đối tượng khi số đếm = 0 
 Giải phóng các đối tượng chết (không còn hoạt đông nữa) 
 Kiểm tra tất cả các tham chiếu 
 Đánh dấu các đối tượng còn được tham chiếu giải phóng các đối 
tượng không được tham chiếu 
Trong java không có kiểu dữ liệu con trỏ như trong C++, người lập trình không cần 
phải quá bận tâm về việc cấp phát và giải phóng vùng nhớ, sẽ có một trình dọn dẹp 
hệ thống đảm trách việc này. Trình dọn dẹp hệ thống sẽ dọn dẹp vùng nhớ cấp phát 
cho các đối tượng trước khi hủy một đối tượng. 
7.Hàm trùng tên (chồng hàm): 
Chồng hàm là dùng cùng một tên để định nghĩa các hàm khác nhau. 
C++, C#, Java đều cho phép baṇ điṇh nghiã nhiều hàm trùng tên, với điều kiêṇ các 
hàm như vậy phải có danh sách tham đối khác nhau, nghĩa là khác nhau về số tham 
đối hoăc̣ kiểu của các tham đối. 
C++, C#, Java chỉ phân biệt hàm này với hàm khác dựa vào số tham đối và kiểu 
của các tham đối, bất chấp tên hàm và kiểu của kết quả trả về. 
Khi không có hàm nào có bộ đối cùng kiểu với bộ tham số(trong lời gọi), thì trình 
biên dịch sẽ chọn hàm nào có bộ đối gần với phép chuyển kiểu dễ dàng nhất. 
Ví dụ: 
int abs(int i);//lấy giá trị tuyệt đối kiếu int 
double abs(double d);//lấy giá trị tuyệt đối kiểu double 
abs(„A‟);//tham số kiểu char,gọi hàm int abs(int i) 
abs(3,14F);//tham số kiểu float,gọi hàm double abs(double d) 
8.Nhập xuất: 
Trong C++, C# và Java sử dụng ứng dụng Console là ứng dụng nhập xuất ở chế độ 
văn bản. 
 Các ứng dụng kiểu Console thường được dùng để minh họa các ví dụ cơ bản liên 
quan đến cú pháp ngôn ngữ, các thuật toán, và các chương trình ứng dụng không 
cần thiết đến giao diện người dùng đồ họa. 
Mặt khác, trong C# và Java không cần khai báo file header như trong C++. 
 Trong C++ sử dụng bộ nhập xuất trong tệp tiêu đề: 
#include 
Bằng cách dùng toán tử xuất: 
cout << biểu thức <<...<< biểu thức; 
và để đưa giá trị biểu thức ra màn hình, dùng toán tử nhập: 
 cin >> biến >>...>> biến; 
 Trong C# dùng phương thức WriteLine() của lớp Console để xuất ra màn 
hình dòng lệnh. 
 Trong Java dùng phương thức println() của lớp Console để xuất ra màn hình 
dòng lệnh. 
NHẬN XÉT: 
C# và Java là những ngôn ngữ kế thừa từ C++ nên chúng có những điểm giống 
nhau nhất định.Măt khác, chúng cũng có những cải tiến mới nhằm hỗ trợ người lập 
trình thao tác một cách dễ dàng.Đồng thời chúng cũng khắc phục được những 
nhược diểm của ngôn ngữ đi trước. 

File đính kèm:

  • pdfĐề tài Điểm giống và khác nhau giữa C++, C# và Java2.pdf