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

C++, C# và Java đều sử dụng chung 2 loại chú thích sau:

- /* đoạn chú thích */ : dùng để chú thích trên một hay nhiều dòng.

- // đoạn chú thích : dùng để chú thích trên một dòng.

Xem xét ví dụ sau:

/* Bai thu hoach so 1

Ho ten: Nguyen Le Duy

Lop: K3C4

*/

main()

{

cout<<”Chao cac ban”; // Xuất ra chuỗi “Chao cac ban”

}

Ngoài ra C# và Java còn hỗ trợ chức năng chú thích khác:

- C# hỗ trợ chú thích XML : /// các lớp, giao diện, phương thức , trường hoặc

trước phần khai báo thuộc tính. Mang ý nghĩa tương tự Javadoc bên Java.

- Java:

 Hỗ trợ chú thích Javadoc: /** đoạn ghi chú */: Javadoc chỉ mô tả ý nghĩa

của các hàm, các lớp, các gói.

 Chú thích HTML

pdf13 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 2204 | Lượt tải: 1download
Tóm tắt nội dung Điểm giống, khác nhau củ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
ải tường minh làm điều đó. Máy tính rất thích hợp 
trong việc lưu giữ vết của hàng ngàn thứ và cấp phát tài nguyên. Nền tảng Java giúp cho phép 
máy tính của ta thực hiện điều đó. Nó duy trì số đếm các tham chiếu đang dùng đến mọi đối 
tượng trong bộ nhớ. Khi con số này chạm mức 0, bộ thu dọn rác sẽ lấy lại vùng bộ nhớ mà đối 
tượng ấy đã sử dụng. Ta có thể trực tiếp gọi bộ thu dọn rác. Nó thường tự xử lý và tất nhiên là 
cũng sẽ tự xử lý trong mọi mã ví dụ trong tài liệu này. 
Nhận xét: Nhìn một cách tổng quan C++ khác nhiều với Java và C# về việc quản lý bộ 
nhớ. Trong C++ ta phải làm một cách thủ công việc khởi tạo và huỷ bộ nhớ còn trong Java và 
C# thì việc này là tự động. 
7/ Hàm trùng tên: 
- Chồng hàm trong C++ 
- Hai hàm có thể có cũng tên nếu khai báo tham số của chúng khác nhau, điều này có 
nghĩa là bạn có thể đặt cùng một tên cho nhiều hàm nếu chúng có số tham số khác nhau 
hay kiểu dữ liệu của các tham số khác nhau (hay thậm chí là kiểu dữ liệu trả về khác 
nhau). Ví dụ: 
// overloaded function 
#include 
int divide (int a, int b) 
{ 
 return (a/b); 
} 
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); 
 cout << "\n"; 
 cout << divide (n,m); 
 return 0; 
} 
Trong ví dụ này chúng ta định nghĩa hai hàm có cùng tên nhưng một hàm dùng hai tham 
số kiểu int và hàm còn lại dùng kiểu float. Trình biên dịch sẽ biết cần phải gọi hàm nào bằng 
cách phân tích kiểu tham số khi hàm được gọi. 
- Chồng hàm trong C# và Java 
Trong cùng một lớp, Java cho phép bạn định nghĩa nhiều hàm trùng tên với điều kiện 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. Khả năng như vậy gọi là sự nạp chồng hàm. 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ề. 
Ví dụ : 
// MyRect.java 
import java.awt.Point; 
class MyRect 
{ 
int x1 = 0; 
int y1 = 0; 
int x2 = 0; 
int y2 = 0; 
MyRect buildRect(int x1, int y1, int x2, int y2) 
{ 
this.x1 = x1; 
this.y1 = y1; 
this.x2 = x2; 
this.y2 = y2; 
return this; 
} 
MyRect buildRect(Point topLeft, Point bottomRight) 
{ 
x1 = topLeft.x; 
y1 = topLeft.y; 
x2 = bottomRight.x; 
y2 = bottomRight.y; 
return this; 
} 
MyRect buildRect(Point topLeft, int w, int h) 
{ 
x1 = topLeft.x; 
y1 = topLeft.y; 
x2 = x1+w; 
y2 = y1 + h; 
return this; 
} 
void display() { 
System.out.print(“Doi tuong MyRect : <” + x1 + “, “+y1); 
System.out.println(“, “+x2+”, “+y2+”>”); 
} 
} 
Thật ra, trong gói awt có sẵn lớp Rectangle chuyên dùng để biểu diễn hình chữ 
nhật. Lớp MyRect của ta chỉ dùng để minh hoạ cho khái niệm nạp chồng hàm. Trong 
lớp MyRect có những hàm giúp bạn tạo ra đối tượng MyRect với những yếu tố cho 
trước khác nhau : 
- Cho trước toạ độ góc trên trái x1, y1 và toạ độ góc dưới phải x2, y2 
- Cho trước góc trên trái và góc dưới phải của hình chữ nhật dưới dạng đối tượng Point 
- Cho trước toạ độ góc trên trái của hình chữ nhật dạng đối tượng Point cùng chiều rộng, 
chiều cao 
Nhờ khả năng nạp chồng hàm, bạn chỉ cần nhớ một tên hàm cho các hàm khác 
nhau cùng chức năng 
Chương trình sử dụng lớp MyRect xây dựng ở trên : 
import java.awt.Point; 
class UngDung { 
public static void main(String args[]) { 
MyRect rect = new MyRect(); 
rect.buildRect(25,25,50,50); 
rect.display(); 
rect.buildRect(new Point(10,10), new Point(20,20)); 
rect.display(); 
rect.buildRect(new Point(10,10), 50, 50); 
rect.display(); 
} 
} 
8/ Nhập xuất: 
- Nhập xuất trong C++ 
- Nhập xuất trong C#: 
+ Luồng nhập xuất 
Thuật ngữ tập tin thì nói chung là liên quan đến những thông tin lưu trữ bên trong ỗ 
đĩa hoặc trong bộ nhớ. Khi làm việc với tập tin, chúng ta bao hàm với việc sử dụng một 
luồng.Nhiều người nhầm lẫn về sự khác nhau giữa tập tin và luồng. Một luồng đơn giản là 
luồng của thông tin, chứa thông tin sẽ được chuyển qua, còn tập tin thì để lưu trữ thông tin. 
Một luồng được sử dụng để gởi và nhận thông tin từ bộ nhớ, từ mạng, web, 
từ một chuỗi,...Một luồng còn được sử dụng để đi vào và ra với một tập tin dữ liệu. 
Thứ tự của việc đọc một tập tin 
Khi đọc hay viết một tập tin, cần thiết phải theo một trình tự xác định. Đầu tiên là 
phải thực hiện công việc mở tập tin. Nếu như tạo mới tập tin, thì việc mở tập tin cùng lúc với 
việc tạo ra tập tin đó. Khi một tập tin đã mở, cần thiết phải tạo cho nó một luồng để đặt thông 
tin vào trong một tập tin hay là lấy thông tin ra từ tập tin. Khi tạo một luồng, cần thiết phải chỉ 
ra thông tin trực tiếp sẽ được đi qua luồng. Sau khi tạo một luồng gắn với một tập tin, thì lúc 
này chúng ta có thể thực hiện việc đọc ghi các dữ liệu trên tập tin. Khi thực hiện việc đọc 
thông tin từ một tập tin, chúng ta cần thiết phải kiểm tra xem con trỏ tập tin đã chỉ tới cuối 
tập tin chưa, tức là chúng ta đã đọc đến cuối tập tin hay chưa. Khi hoàn thành việc đọc ghi 
thông tin trên tập tin thì tập tin cần phải được đóng lại. 
Tóm lại các bước cơ bản để làm việc với một tậo tin là: 
 Bước 1: Mở hay tạo mới tập tin 
 Bước 2: Thiết lập một luồng ghi hay đọc từ tập tin 
 Bước 3: Đọc hay ghi dữ liệu lên tập tin 
 Bước 4: Đóng lập tin lại 
Các phương thức cho việc tạo và mở tập tin 
Có nhiều kiểu luồng khác nhau. Chúng ta sẽ sử dụng những luồng khác nhau và 
những phương thức khác nhau phụ thuộc vào kiểu dữ liệu bên trong của tập tin. Trong phần 
này, việc đọc/ghi sẽ được thực hiện trên tập tin văn bản. Trong phần kế tiếp chúng ta học cách 
đọc và viết thông tin trên tập tin nhị phân. Thông tin nhị phân bao hàm khả năng mạnh lưu trữ 
giá trị số và bất cứ kiểu dữ liệu nào khác. 
Để mở một tập tin trên đĩa cho việc đọc và viết tập tin văn bản, chúng ta cần phải sử 
dụng cả hai lớp File và FileInfo. Một vài phương thức có thể sử dụng trong những lớp này. 
Các phương thức này bao gồm: 
AppendText Mở một tập tin để và tập tin này có thể được thêm văn bản vào trong nó. 
Tạo luồng StreamWriter sử dụng để thêm vào trong văn bản. 
Create Tạo mới một tập tin 
CreateText Tạo và mở một tập tin văn bản. Tạo ra một luồng StreamWriter. 
Open Mở một tập tin để đọc/viết. Mở một FileStream 
OpenRead Mở một tập tin để đọc 
OpenText Mở một tập tin văn bản để đọc. Tạo ra StreamReader để sử dụng. 
OpenWrite Mở một tập tin cho việc đọc và ghi. 
 Làm thế nào để chúng ta có thể biết được khi nào sử dụng lớp File chính xác hơn là sử 
dụng lớp FileInfo nếu chúng cùng chứa những phương thức tương tự với nhau. Thật ra hai lớp 
này có nhiều sự khác biệt. Lớp File chứa tất cả các phương thức tĩnh, thêm vào đó lớp File tự động 
kiểm tra permission trên một tập tin. Trong khi đó nếu muốn dùng lớp FileInfo thì phải tạo thể 
hiện của lớp này. Nếu muốn mở một tập tin chỉ một lần thì tốt nhất là sử dụng lớp File, còn 
nếu chúng ta tổ chức việc sử dụng tập tin nhiều lần bên trong chương trình, tốt nhất là ta dùng 
lớp FileInfo. Hoặc nếu không chắc chắn cách sử dụng thì chúng ta có thể sử dụng lớp FileInfo. 
Viết vào một tập tin văn bản 
Cách tốt nhất để nắm vững cách thức làm việc với tập tin là chúng ta sẽ bắt tay vào 
tìm hiểu chương trình. Trong phần này chúng ta sẽ tìm hiểu một ví dụ minh họa việc tạo ra 
một tập tin văn bản rồi sau đó viết lại thông tin vào nó. 
Ví dụ 12.7: Viết dữ liệu vào tập tin văn bản. 
----------------------------------------------------------------------------- 
//writing.cs:: viết vào một tập tin văn bản namespace Programming_CSharp 
{ 
using System; using System.IO; public class Tester 
{ 
public static void Main(String[] args) 
{ 
if (args.Length < 1) 
{ 
Console.WriteLine(“Phai nhap ten tap tin.”); 
} 
else 
{ 
StreamWriter myFile = File.CreateText( args[0]); 
myFile.WriteLine(“Khong co viec gi kho”); myFile.WriteLine(“Chi so long 
khong ben”); myFile.WriteLine(“Dao nui va lap bien”); 
myFile.WriteLine(“Quyet chi at lam nen”); 
for(int i=0; i < 10; i++) 
{ 
myFile.Write(“{0} ”,i); 
} 
myFile.Close(); 
} 
} 
} 
} 
----------------------------------------------------------------------------- 
Khi chạy chương trình trên chúng ta phải cung cấp tên của tập tin được tạo 
mới, nếu không cung cấp thì chương trình sẽ không thực hiện việc tạo tập tin. Giả sử 
chúng ta có cung cấp một tham số dòng lệnh cho chương trình thì một tập tin văn bản 
mới được tạo ra có nội dung như sau: 
Khong co viec gi kho Chi so long khong ben Dao nui va lap bien Quyet chi at lam nen 
0 1 2 3 4 5 6 7 8 9 
Trong chương trình trên không thực hiện việc xử lý ngoại lệ. Điều này dẫn đến 
chương trìnhcó thể phát sinh ra những ngoại lệ và những ngoại lệ này không được xử 
lý. Đây là cách lập trình không tốt, nên yêu cầu người đọc nên thêm các xử lý ngoại lệ 
vào chương trình trên, ngoại lệ này cũng tương tự như ngoại lệ trong ví dụ trước. 
Như chúng ta thấy hàm Main có tham số và tham số này sẽ được nhận thông qua dòng 
lệnh, trong các ví dụ trước, chương trình nhận tham số dòng lệnh thông qua lớp 
Environment, còn ở đây ta khai báo tham số dòng lệnh trực tiếp cho chương trình. Dòng 
lệnh đầu tiên của hàm Main() là kiểm tra số tham số nhập vào, nếu không có tham số 
nào chương trình sẽ xuất ra thông báo là không có tên tập tin và kết thúc chương trình. 
Trong trường hợp cung cấp tham số đầy đủ chương trình sẽ thực hiện việc tạo 
mới tập tin. Phương thức CreateText của lớp File được gọi để tạo ra một đối tượng 
StreamWriter mới gọi là myFile. Tham số được truyền cho hàm là tên của tập tin sẽ được tạo. 
Kết quả cuối cùng của dòng lệnh này là tạo ra một tập tin văn bản mới. Dữ liệu 
s4 được đưa vào tập tin thông qua StreamWriter với thể của nó là myFile. 
Ghi chú: Nếu một tập tin hiện hữu với cùng tên như tập tin mà chúng ta tạo ra 
thì tập tin cũ sẽ được viết chồng, tức là dữ liệu bên trong tập tin cũ sẽ bị xóa mất. Hình 
sau minh họa việc thực hiện tạo tập tin và đưa dữ liệu vào 

File đính kèm:

  • pdfĐiểm giống, khác nhau của C++, C# và Java.pdf