[C\C++] Những khác biệt cơ bản giữ C và C++

Những khác biệt có thể bạn chưa biết trong lập trình C, C++ ?
1. Sự khác biệt giữa C và C++

- Hầu hết IT trên thế giới đều biết về 2 ngôn ngữ lập trình C, C++. Như chúng ta đã biết, C++ là ngôn ngữ ra đời sau ngôn ngữ C, thực chất nó mở rộng cho ngô ngữ C nhằm tăng cường tính an toàn, cung cấp cho các lập trình viên nhiều lựa chọn hơn, đơn giản hóa lập trình ở mức cao hơn, và cung cấp một cách tiếp cận tốt hơn đối với những chương trình có quy mô lớn.

- C++ cũng là ngôn ngữ lớn hơn với nhiều tính năng và phức tạp hơn so với C. Giữa C và C++ có rất nhiều khác biệt. Trong khuôn khổ bài viết này, tôi chỉ liệt kê 10 điểm khác biệt chính giữa 2 ngôn ngữ này.

Cụ thể: 

C: Không phải ngôn ngữ hướng đối tượng.

C++: Là một ngôn ngữ hướng đối tượng (gồm 4 khái niệm về hướng đối tượng)

C: Là một ngôn ngữ lập trình thủ tục. Không phải là ngôn ngữ lập trình thủ tục.

C++: Hỗ trợ các structure. Hỗ trợ các lớp và đối tượng.
C: Không có biến tham chiếu, chỉ hỗ trợ con trỏ. Hỗ trợ cả biến tham chiếu và con trỏ.
Sử dụng các hàm scanf và printf để nhập xuất. 

C++: Sử dụng các hàm cin>> và cout<< để nhập xuất.

C: Không thể khai báo hàm trong các structure. 

C++: Có thể khai báo hàm trong các structure.

C: Được xem là một ngôn ngữ lập trình cấp thấp. 

C++: Được xem là sự kết hợp giữa ngôn ngữ lập trình cấp thấp và cấp cao.

C: Không hỗ trợ các hàm inline, thay vào đó có thể sử dụng khai báo #define 

C++: Hỗ trợ các hàm inline.
C: Sử dụng phương pháp tiếp cận từ trên xuống (top-down). 

C++: Sử dụng phương pháp tiếp cận từ dưới lên (bottom-up).

C: Là ngôn ngữ lập trình hướng chức năng (function driven). 

C++: Là ngôn ngữ lập trình hướng đối tượng (Object driven).


- Dưới đây là danh sách các tính năng được hỗ trợ trong C++ (C không hỗ trợ).
  • Classes
  • Member functions
  • Constructors and destructors
  • Derived classes
  • Virtual functions
  • Abstract classes
  • Access control (public, private, protected)
  • friend functions
  • Pointers to members
  • static members
  • mutable members
  • Operator overloading
  • References
  • Templates
  • Inline functions
  • Default arguments
  • Function overloading
  • Namespaces
  • Exception handling
  • Run-time type identification
  • // comments
  • True const
  • Declarations as statements
  • Automatically typedef’d struct tags
  • Type safe linkage
  • new and delete
  • bool keyword
  • Safer and more robust casting

2. Sự khác biệt giữa endl và ‘\n’ trong C++

Trong C++, để kết thúc một dòng sang dòng mới ta có thể sử dụng std::endl hoặc ‘\n’ , nhưng hoạt động của từng cách là khác nhau:

std::endl gửi một ký tự xuống dòng ‘\n’ và xóa bộ nhớ đệm đầu ra (output buffer).
‘\n’ gửi một ký tự xuống dòng, nhưng không xóa bộ đệm đầu ra.

Nếu bạn sử dụng tính năng debug thì sẽ thấy rõ hơn sự khác biệt này. Lời khuyên là bạn nên sử dụng std::endl sẽ tốt hơn so với ‘\n’ vì bộ nhớ đệm được giải phóng hiệu quả hơn.

Ví dụ: sử dụng cả std::endl và ‘\n’ . (Bạn không thể thấy bước xóa bộ đệm trong quá trình này)

#include <iostream.h> 

int main() 
   cout <<"Testing 1" <<endl; 
   cout <<"Testing 2\n"; 
   return 0; 
}


 >> Output của chương trình: 
       Testing 1 
       Testing 2


3. Sự khác biệt giữa printf() và cout<<

- printf là một hàm có một số tham biến, tham biến đầu tiên là chuỗi định dạng giải thích việc xử lý các đối số tiếp theo. cout<< là một đối tượng thuộc lớp std::ostream. Cả hai hoàn toàn khác nhau về hình thức, nhưng kết quả đưa ra là giống nhau, dữ liệu đều được gửi đến thiết bị xuất chuẩn.

- Một vài câu hỏi liên quan:
Giữa printf và cout<< cái nào hoạt động nhanh hơn?
=> printf, nhưng khác biệt là rất nhỏ.
Giữa printf và cout<< cái nào tốt hơn?
=> Điều đó phụ thuộc vào sở thích cá nhân và những gì cần được thực hiện.
Tôi nên sử dụng printf hay cout<< ?
=> Bạn nên sử dụng theo cách mà bạn cảm thấy thoải mái nhất.

- Chúng ta nên sử dụng iostream của C++ thay vì các hàm của C, bởi vì iostream an toàn hơn cho người dùng tự định nghĩa kiểu.

4. Sự khác biệt giữa NULL, 0, và nul

- NULL là một macro được định nghĩa trong các header chuẩn.

- 0 là hằng số nguyên.

- là một hằng ký tự.

- nul là tên của hằng ký tự.

Tất cả những ký hiệu trên không thể hoán đổi cho nhau.

- NULL được sử dụng cho các con trỏ, chỉ có thể được định nghĩa như ((void *)0), đây là nguyên nhân gây ra các vấn đề với con trỏ.

- 0 có thể được sử dụng ở bất cứ đâu, nó đại diện chung cho kiểu giá trị ‘không’ và trình biên dịch sẽ sắp xếp mọi thứ.

- chỉ được sử dụng trong các trường hợp nhất định.

- nul không được định nghĩa trong C hay C++, bạn không nên sử dụng nó, trừ khi bạn định nghĩa nó một cách thích hợp giống như:#define nul ''


5. Sự khác nhau giữa ‘&’ và ‘*’ trong C++

- Trong C++, ‘&’ được sử dụng trong việc đa năng hóa (overload) toán tử, lấy địa chỉ của một đối tượng, thực hiện phép toán AND, hoặc thực hiện bất cứ điều gì liên quan đến kiểu người dùng định nghĩa nếu đa năng hóa nó, hoặc tạo một tham chiếu. Trong khuôn khổ bài viết này, tôi sẽ đề cập đến ‘&’ trong trường hợp là tham chiếu (reference).

- Một tham chiếu là tên thay thế cho một đối tượng, một tên tương tự cùng truy cập đến một vị trí trong bộ nhớ, nhưng có tên khác nhau. Sự khác biệt lớn nhất giữa con trỏ (pointer) và tham chiếu (reference) là một tham chiếu không cần truy cập đến một vùng nhớ.

- Ví dụ: một tham chiếu
   int i = 1; 
   int& r = i; // i và r cùng tham chiếu đến một vùng nhớ r = 2; // i = 2


- Con trỏ là một biến riêng biệt có chứa đại chỉ bộ nhớ như là giá trị của nó, đó là địa chỉ có thể truy cập đến vùng nhớ. Chức năng của con trỏ tương tự các tham chiếu.
   int i = 1; 
   int *p = &i; // con trỏ p trỏ tới địa chỉ biến i *p = 2 // i = 2;


- Sự khác biệt lớn nhất giữa tham chiếu và con trỏ là con trỏ có thể được xử lý như một biến bất kỳ. Do đó ta cũng có thể thực hiện các toán tử trên con trỏ.
   char *p = "Test"; 
   p++; // p = "est";

Tham khảo thanhcuong

Quảng cáo

Загрузка...

Categories

8051 (1) AI (1) AI programming (1) amazon (1) Android (27) ASP (1) Assembly (17) Bài giảng (2) Bài giảng lập trình C và Cpp (16) bài giảng quản lý dự án CNTT (1) bài tập java (1) bài tập lập trình (1) Bài viết hay (62) Bản đồ tư duy (1) Bidvertiser (1) Biểu diễn thuật toán (1) bitcoin (1) blockchain (1) Blockchain là gì (1) Bubble-Sort (1) C (77) C Plus Plus (103) C sharp (11) C++ (3) cấu trúc dữ liệu giải thuật (1) Cây (tree) (2) Cây quyết định (3) CDSL phân tán (1) Chữa bài tập Java (1) code assembly (1) Công nghệ điện toán đám mây (1) Công nghệ lập trình (1) Cơ sở dữ liệu (10) CSS (2) Cuộc cách mạng công nghiệp 4.0 (1) Danh ngôn lập trình (1) Danh sách liên kết (list) (1) Datamining (4) Đại số gia tử và ứng dụng (1) đăng ký Amazon (1) Đăng ký hosting (2) đặt hàng trên Amazon (1) Đệ quy (2) Đồ họa (4) Độ phức tạp của thuật toán (1) ebook-csdl (1) ebook-giaithuat (1) ebook-laptrinh (1) ebook-phancung-mang (1) ebook-tinhocungdung (1) ebook-web (1) Exceptions (1) Genetic Algorithm (1) Giải hệ phương trình tuyến tính (5) giải thuật (3) giải thuật Đệ quy (1) Giáo trình (2) Góc học tập (34) Góc suy ngẫm (1) Google App Engine (2) Heap-Sort (1) Hệ quản trị CSDL (1) Học lập trình (125) Học lập trình C và CPP qua ví dụ (15) học lập trình Java (7) HostGator (1) hợp ngữ (1) HPH (25) HTML (1) Hướng Dẫn Đăng Ký Tên Miền và Host Trên Hostgator (1) hướng dẫn mua host (1) hướng dẫn nhận tiền (1) hướng dẫn payoneer (1) Hướng dẫn sử dụng Emu8086 (1) hướng dẫn viết báo (1) hướng đăng ký tên miền (1) Insert-sort (2) iOS (1) Java (50) Java Căn bản (5) java core (3) Java GUI (1) JavaScript (3) Kiếm tiền online (10) Kỹ thuật đồ họa máy tính (9) Kỹ thuật lập trình (16) kỹ thuật SEO (1) Lập trình 8051 với C/C++ (1) Lập trình căn bản (7) Lập trình Cơ sở dữ liệu (2) Lập trình điều khiển thiết bị (1) Lập trình hợp ngữ (1) Lập trình hướng đối tượng (38) Lập trình hướng đối tượng với Java (6) Lập trình mạng (6) Lập trình mobile (3) Lập trình nhúng (1) Lập trình trí tuệ nhân tạo (1) lập trình vi xử lý (1) lập trình viên (1) Lập trình viên độc lập (1) Luyện thi IC3 (4) Lý thuyết Cơ sở dữ liệu (2) Lý thuyết đồ thị (11) Mạng máy tính (1) Mẹo tìm kiếm trên Google (1) Merge-Sort (1) MS Access (1) Mua hàng trên Amazon (1) Nghiên cứu khoa học (1) ngon-ngu-khac (1) Ngôn ngữ lập trình (1) Nhúng code Assembly trong C\C++ (2) Những lỗi thường gặp khi lập trình (1) Oracle (1) Pascal (3) payoneer (1) people-group (1) phần cứng máy tính (1) PHP (1) Quản lý dự án CNTT (1) Queue (hàng đợi) (1) Quick-Sort (1) Seclection-sort (2) SEO (1) SQL (5) Stack (ngăn xếp) (1) Swift (8) tài liệu CNTT miễn phí (2) Tài liệu tham khảo (2) thanh toán quốc tế (1) Thiết kế Web (2) Thủ thuật máy tính (5) thuattoan-khac (1) Thuật toán (41) Thuật toán di truyền (2) Thuật toán Đệ quy (4) Thuật toán K-Mean (1) Thuật toán khác (9) Thuật toán leo đồi (1) Thuật toán ma trận (7) Thuật toán Sắp Xếp -Sort (9) Thuật toán Tìm kiếm - Search (5) Thương mại điện tử (4) Tiện ích máy tính (3) Tìm hiểu Blockchain (1) Tìm kiếm nhị phân (2) Tìm kiếm tuần tự (Line search) (2) Tin học văn phòng (5) Tin tức công nghệ (7) Tính định thức của ma trận (1) Toán rời rạc (12) Trí tuệ nhân tạo (8) Tự học lập trình Android (14) Tự học lập trình C và CPP (14) tự học lập trình iOS (8) Tự học lập trình java qua các ví dụ (7) Ứng dụng cơ sở dữ liệu (1) VB (2) vẽ ngôi nhà (1) ví dụ Assembly (1) xcode (8) XML (1) Xử lý ma trận (mảng 2 chiều) (7) Xử lý mảng 1 chiều (1) Xử lý ngoại lệ (1)