10/2/15

Điểm mới của C++ so với C

C++ là một ngôn ngữ được phát triển từ C nên nó thừa hưởng tất cả những đặc tính của ngôn ngữ C. Tuy vậy, C++ cũng có những điểm mới giúp tiện dụng hơn cho người lập trình. Điểm mới quan trọng nhất là C++ đã hỗ trợ hướng đối tượng với các khái niệm class, method,... Bài viết này chủ yếu tập trung vào những điểm khác biệt của C++ so với C.

Chú thích trong C++
C++ cũng dùng 2 kiểu chú thích như C, đó là dấu // cho một dòng và cặp dấu /* .. */ cho một đoạn nhiều dòng. Các cặp dấu /* .. */ không được lồng nhau.
Tuy nhiên, chú thích sau dấu // trong C phải được đặt trên một dòng riêng biệt nhưng trong C++ bạn có thể đặt trên cùng dòng với các câu lệnh.
//Trong C

//Khởi tạo bốn biến.
int a, b, c, d;

//Trong C++

int a, b, c, d; //Khởi tạo bốn biến.

Kiểu dữ liệu và ép kiểu trong C++
C++ có thêm các kiểu dữ liệu mới được dựng sẵn như boolstring.
Ngoài cách ép kiểu số như trong C, người lập trình còn có thể dùng kiểu dữ liệu để ép kiểu như một hàm.
//Trong C

int a = 5;
printf("%f", (float)a);

//Trong C++

int a = 5;
cout << float(a) << endl;


Phạm vi và khai báo biến
Không giống như C, chúng ta có thể khai báo biến tại một vị trí bất kỳ trong chương trình và một biến chỉ có tầm vực trong khối lệnh mà nó được khai báo.

Vì vậy, trong trường hợp các biến có tên giống nhau, C++ còn cung cấp thêm toán tử phạm vi :: để giúp xác định biến nào đang được sử dụng. Toán tử phạm vi thường được sử dụng để truy cập vào biến toàn cục khi có biến cục bộ trùng tên.
int x = 5;

void Output()
{
   int x = 6;
   cout<<x<<endl; //Xuất biến cục bộ x = 6
   cout<<::x<<endl; //Xuất biến toàn cục x = 5
}

Nhập xuất trong C++
C là ngôn ngữ hướng cấu trúc nên các công việc nhập xuất chuẩn được thực hiện thông qua các hàm. C++ đã hỗ trợ hướng đối tượng nên được thực hiện qua các luồng nhập xuất chuẩn. Các luồng nhập xuất hay gặp nhất là cincout.

Xem bài viết: Nhập xuất cơ bản trong C và C++

Quản lý bộ nhớ động
Thay vì thực hiện cấp phát động thông qua các hàm trong thư viện alloc.h, C++ đã cung cấp 2 toán tử newdelete để đơn giản hóa việc này.

Xem bài viết: Cấp phát động trong C/C++

Không gian tên (namespace) của các đối tượng
Các đối tượng trong C++ thường được tổ chức thành các namespace. Có thể xem namespace như là một thư mục chứa các đối tượng nên nó cho phép phân biệt các đối tượng cùng tên (ở các namespace khác nhau).

Ví dụ: các luồng cout và cin nằm trong namespace std nên ta phải gọi tường minh std::coutstd::cin mỗi khi sử dụng, hoặc khai báo using namespace std; ở phần khai báo để có thể gọi các luồng này mà không cần std:: ở trước nữa.

Tái định nghĩa hàm (overloading)
C++ cho phép định nghĩa các hàm trùng tên nhưng khác tham số. Việc này giúp đơn giản hóa việc thực hiện một công việc với các đối tượng khác nhau.

Ví dụ: Sau khi overload thì hàm Max() có thể thực hiện cho số nguyên lẫn số thực thay vì đặt tên MaxInt() cho hàm tìm số nguyên và MaxFloat() cho hàm tìm số thực.
int Max(int a, int b)
{
   return a > b ? a : b;
}
float Max(float a, float b)
{
   return a > b ? a : b;
}

Các hàm trùng tên nhưng phải khác nhau về số lượng, thứ tự, kiểu tham số, không phân biệt kiểu trả về.

Hàm nội tuyến (inline)
Sử dụng bằng cách đặt từ khóa inline vào trước khai báo hàm. Tác dụng yêu cầu trình biên dịch copy code vào chương trình thay vì thực hiện lời gọi hàm. Điều này giúp giảm thời gian thực hiện chương trình nhưng nó làm tăng kích thước mã nguồn, vì vậy chỉ nên sử dụng inline khi hàm có kích thước nhỏ.
inline int Max(int a, int b)
{
   return a > b ? a : b;
}

Không có nhận xét nào:

Đăng nhận xét