Đề tài Điểm giống và khác nhau giữa C++, C# và Java - Lưu Văn Diệp
Java sử dụng các từ khóa “static final”
để tạo nên các biến hằng; trong Java
một biến “static final” là một biến lớp
thay vì là một biến đối tượng, và trình
biên dịch sẽ ngăn ngừa bất kỳ các đối
tượng khác thay đổi giá trị của biến.
n = 100; /* Biến maxn là biến toàn cục, có thể sử dụng bất kỳ nơi nào trong chương trình */ int main() { cout << maxn;//xuất ra màn hình 100 int maxn = 200; //biến maxn này là biến cục bộ cout << maxn;//xuất ra màn hình 200 cout << ::maxn;//xuất ra màn hình 100 //sử dụng toán tử ::, trình biên dịch hiểu đó //là biến toàn cục return 1; } Tương tự C++ Java sử dụng các từ khóa “static final” để tạo nên các biến hằng; trong Java một biến “static final” là một biến lớp thay vì là một biến đối tượng, và trình biên dịch sẽ ngăn ngừa bất kỳ các đối tượng khác thay đổi giá trị của biến. 2.Hằng #define //vd: #define maxn 100 /* Nơi nào xuất hiện maxn thì trình biên dịch tự động hiểu đó là 100 */ #define get_max a>b?a:b int main() { cout<<maxn;//xuất ra màn hình 100 int maxn = 200;//báo lỗi // vì không thể gán giá trị 200 cho 100 int a = 2 , b = 3; int max = get_max; cout << max;//xuất ra màn hình 3 return 0; } readonly <kiểu dữ liệu> = ; Kiểu dữ liệu 1.Kiểu giá trị 2.Kiểu tham chiếu Từ khóa Mô tả Kích cỡ Tối thiểu Tối đa bool Kiểu logic true / false int Số nguyê n 32 bit -231 231-1 long Số nguyê n dài 64 bit -263 263-1 unsigned float Kiểu thực 32 bit double 64 bit char Kiểu ký tự 16 bit Unicode 0 Unicode 216-1 void bool byte, sbyte char short, ushort, int, uint, long, ulong float, double decimal datetime object string Tương tự C++ Kiểu dữ liệu Mô tả Mảng(array) Tập hợp các dữ liệu cùng kiểu Lớp (class) Là sự cài đặt mô tả về 1 đối tượng trong bài toán Giao diện(interface) Là một lớp thuần trừu tượng được tạo ra cho phép cài đặt đa thừa kế trong Java. Kiểm tra kiểu, đổi kiểu int i;//kiểu số nguyên float f = 3.14;//kiểu số thực i = (int) f;//chuyển kiểu tường minh //hoặc i = int (f); Tương tự C++ Tương tự C++ Nếu trong một phép toán có sự tham gia của nhiều toán hạng có kiểu khác nhau thì java sẽ chuyển kiểu tự động cho các toán hạng một cách tự động theo quy tắc sau: byte short int long float double Chuyển đổi kiểu tường minh Để chuyển đổi kiểu một cách tường minh ta sử dụng cú pháp sau: (type) biểu_thức; khi gặp câu lệnh này java sẽ tính toán giá trị của biểu thức sau đó chuyển đổi kiểu giá trị của biểu thức thành kiểu type. Ví dụ: (int) 2.5 * 2 = 4 (int) 2.5 * 2.5 = 5 (int)(2.5 * 2.5) = 6 1+(float)5/2=1+5/(float)2= 1+(float)5/(float)2=3.5 Chú ý: 1. Phép toán chuyển kiểu là phép toán có độ ưu tiên cao, nên (int)3.5*2≠(int)(3.4*2) 2. Cần chú ý khi chuyển một biểu thức kiểu dữ liệu có miền giá trị lớn sang một kiểu có miền giá trị nhỏ hơn. Trong trường hợp này có thể bạn sẽ bị mất thông tin. Nhập / Xuất #include #include using namespace std; int main() { int x; cin >> x; //nhập giá trị của x cout << x <<endl; // xuất giá trị của x //ra màn hình sau đó con trỏ xuống dò namspace System; class program { static void Main() { int x = 4; Console.WriteLine(“{ 0}”,x); //xuất ra //màn hình giá class test { public static void main(String[] args) { int i = 3; System.out.println(i); //xuất ra //màn hình giá 3 } } scanf(“%d”,&x); printf(“%d”,x); return 0; } 4 Console.Read(); /*dừng chương trình đến khi nhấn 1 phím bất kỳ để thoát*/ } } Không gian tên Mỗi ngôn ngữ lập trình có một tập các từ khoá, người lập trình phải sử dụng từ khoá theo đúng nghĩa mà người thiết kế ngôn ngữ đã đề ra, ta không thể định nghĩa lại nghĩa của các từ khoá, cũng như sử dụng nó để đặt tên biến, hàm.. Java: Abstract Sử dụng để khai báo lớp, phương thức trừu tượng boolean Kiểu dữ liệu logic Break Được sử dụng để kết thúc vòng lặp hoặc cấu trúc switch Byte Kiểu dữ liệu số nguyên case Được sử dụng trong lệnh switch cast Chưa được sử dụng catch Được sử dụng trong xử lý ngoại lệ Char Kiểu dữ liệu ký tự Class Dùng để khai báo lớp Const Hằng Continue Được dùng trong vòng lặp để bắt đầu một vòng lặp mới default Dùng trong switch do Lệnh điều kiện Double Kiểu dữ liệu số thực else Khả năng lựa chon thứ 2 trong câu lệnh if extends Chỉ rằng một lớp được kế thừa từ một lớp khác false Giá trị logic final Dùng đẻ khai báo hằng số, phương thức không thể ghi đè, hoặc lớp không thể kế thừa finally phần cuối của khối xử lý ngoại lệ float kiểu số thực for Câu lệnh lặp goto Lệnh nhảy if Câu lệnh lựa chọn implements chỉ rằng một lớp triển khai từ một giao diện import Khai báo sử dụng thư viện instanceof kiểm tra một đối tượng có phải là một thể hiện của lớp hay không interface sử dụng để khai báo giao diện long kiểu số nguyên native Khai báo phương thức được viết bằng ngông ngữ biên dịch C++ new tạo một đối tượng mới null một đối tượng không tồn tại package Dùng để khai báo một gói private đặc tả truy xuất protected đặc tả truy xuất public đặc tả truy xuất return Quay từ phương thức về chỗ gọi nó short kiểu số nguyên static Dùng để khai báo biến, thuộc tính tĩnh Super Truy xuất đến lớp cha switch lệnh lựa chọn synchronized một phương thức độc quyền truy xuất trên một đối tượng this Ám chỉ chính lớp đó throw Ném ra ngoại lệ throws Khai báo phương thức ném ra ngoại lệ true Giá trị logic try sử dụng để bắt ngoại lệ void Dùng để khai báo một phương thức không trả về giá trị While Dùng trong cấu trúc lặp Định danh (tên) Tên dùng để xác định duy nhất một đại lượng trong chương trình. Trong java tên được đặt theo quy tắc sau: - Không trùng với từ khoá - Không bắt đầu bằng một số, tên phải bắt đầu bằng kí tự hoặc bắt đầu bằng kí $,_ - Không chứa dấu cách, các kí tự toán học như +, -, *,/, %.. - Không trùng với một định danh khác trong cùng một phạm vi Chú ý: - Tên nên đặt sao cho có thể mô tả được đối tượng trong thực tế - Giống như C/C++, java có phân biệt chữ hoa chữ thường - Trong java ta có thể đặt tên với độ dài tuỳ ý - Ta có thể sử dụng các kí tự tiếng việt để đặt tên C# abstract default foreach object sizeof unsafe as delegate goto operator stackalloc ushort base do if out static using bool double implicit override string virtual break else in params struct volatile byte enum int private switch void case event interface protected this while catch explicit internal public throw char extern is readonly true checked false lock ref try class finally long return typeof const fixed namespace sbyte uint continue float new sealed ulong decimal for null short unchecked Hàm trùng tên #include int divide (int a, int b) { return (a/b); } using System; public class program { public int divide (int a, int b) { public class OverloadingOrder { static void print(String s, int i) { System.out.println( "String: " + s +", int: " + i); float divide (float a, float b) { return (a/b); } int main () { int x=5,y=2; float n=5.0,m=2.0; cout << divide (x,y); //gọi hàm divide (int a, int b) cout << "\n"; cout << divide (n,m); //gọi hàm divide (float a, float b) return 0; } C++ cho phép đặt tên các hàm trùng nhau. Nó có thể có các tham số khác nhau, kiểu dữ liệu của các tham số khác nhau, thậm chí kiểu trả về khác nhau, trong thân hàm quá tải có thể có nội dung khác nhau. return (a/b); } public float divide(float a, float b) { return (a / b); } public int x; public float y; } public class test { public static void Main() { program a = new program(), b = new program(); a.x = 5; b.x = 8; Console.WriteLine("{0}",a.divide(a.x, b.x)); a.y = 5; b.y = 8; Console.WriteLine("{0}",a.divide(a.y, b.y)); Console.Read(); } } } static void print(int i, String s) { System.out.println( "int: " + i + ", String: " + s); } public static void main(String[] args) { print("String first", 11); print(99, "Int first"); } } Nhận xét: C# là ngôn ngữ ít từ khóa. C# là ngôn ngữ sử dụng giới hạn những từ khóa. Phần lớn các từ khóa được sử dụng để mô tả thông tin. Không nhất thiết một ngôn ngữ mạnh là có nhiều từ khóa. Đúng vậy, ít nhất là trong trường hợp ngôn ngữ C#, chúng ta có thể tìm thấy rằng ngôn ngữ này có thể được sử dụng để làm bất cứ nhiệm vụ nào. Mã nguồn C# không đòi hỏi phải có tập tin header. Tất cả mã nguồn được viết trong khai báo một lớp. .NET runtime trong C# thực hiện việc thu gom bộ nhớ tự động. Do điều này nên việc sử dụng con trỏ trong C# ít quan trọng hơn trong C++. Những con trỏ cũng có thể được sử dụng trong C#, khi đó những đoạn mã nguồn này sẽ được đánh dấu là không an toàn (unsafe code). C# cũng từ bỏ ý tưởng đa kế thừa như trong C++. Và sự khác nhau khác là C# đưa thêm thuộc tính vào trong một lớp giống như trong Visual Basic. Và những thành viên của lớp được gọi duy nhất bằng toán tử “.” khác với C++ có nhiều cách gọi trong các tình huống khác nhau. Java là một ngôn ngữ mạnh, giống như C++ và C# được phát triển dựa trên C. Điểm giống nhau C# và Java là cả hai cùng biên dịch ra mã trung gian: C# biên dịch ra MSIL còn Java biên dịch ra bytecode. Sau đó chúng được thực hiện bằng cách thông dịch hoặc biên dịch just-in-time trong từng máy ảo tương ứng. Tuy nhiên, trong ngôn ngữ C# nhiều hỗ trợ được đưa ra để biên dịch mã ngôn ngữ trung gian sang mã máy. C# chứa nhiều kiểu dữ liệu cơ bản hơn Java và cũng cho phép nhiều sự mở rộng với kiểu dữ liệu giá trị. Ví dụ, ngôn ngữ C# hỗ trợ kiểu liệt kệ (enumerator), kiểu này được giới hạn đến một tập hằng được định nghĩa trước, và kiểu dữ liệu cấu trúc đây là kiểu dữ liệu giá trị do người dùng định nghĩa. Tương tự như Java, C# cũng từ bỏ tính đa kế thừa trong một lớp, tuy nhiên mô hình kế thừa đơn này được mở rộng bởi tính đa kế thừa nhiều giao diện.
File đính kèm:
- Đề tài Điểm giống và khác nhau giữa C++, C# và Java - Lưu Văn Diệp.pdf