Ngôn ngữ lập trình C++

Ngôn ngữ lập trình C++ là một ngôn ngữ lập trình hướng đối tượng(OOP – Object-oriented programming) được phát triển bởi Bjarne Stroustrup. C++ là ngôn ngữ lập trình được phát triển trên nên tảng của ngôn ngữ lập trình C. Do đó, C++ có song song cả 2 phong cách(style) lập trình hướng cấu trúc giống C và có thêm phong cách hướng đối tượng. Trong nhiều trường hợp, C++ sử dụng kết hợp cả 2 style trên. Do đó, nó được xem là một ngôn ngữ “lai tạo”.

Ngôn ngữ C++ là một ngôn ngữ lập trình cấp trung. Bởi vì nó có các tính chất của cả ngôn ngữ lập trình bậc thấp(Pascal, C…) và ngôn ngữ lập trình bậc cao(C#, Java, Python…).

Ngôn ngữ lập trình C++(C plus plus) có đuôi mở rộng là .cpp

Stroustrup đã bắt đầu làm việc với khái niệm lớp trong 1979. Ý tưởng tạo ra một ngôn ngữ mới bắt nguồn từ kinh nghiệm lập trình khi mà ông viết luận án tiến sĩ. Stroustrup nhận ra rằng Simula có nhiều tính năng hữu dụng cho việc phát triển một phần mềm lớn nhưng nó đã quá chậm trong ứng dụng thực tế, trong khi đó, BCPL lại nhanh nhưng ở cấp quá thấp và không tiện cho việc phát triển phần mềm lớn. Đến khi làm việc ở Bell Labs, thì ông gặp phải vấn đề trong việc phân tích nhân Unix với việc tính toán phân tán. Dùng lại kinh nghiệm lúc làm luận án tiến sĩ, Stroustrup cài thêm các tính năng giống như Simula vào trong C để nâng cao. C được chọn là vì đó là ngôn ngữ tổng quát, nhanh và năng động. Lần đầu tiên, các chức năng như là lớp, lớp dẫn xuất, kiểm tra kiểu mạnh, nội tuyến (inline) và đối số mặc định đã được thêm vào trong C. Lần xuất bản đầu tiên vào thị trường xảy ra trong tháng 11/1985.

Năm 1983, thì tên C với các lớp được đổi thành C++. các chức năng mới được thêm vào bao gồm hàm ảo, quá tải hàm và toán tử, tham chiếu, hằng, khả năng kiểm soát bộ nhớ của lưu trữ tự do, nâng cao việc kiểm soát kiểu và lệnh chú giải kiểu (//).

Năm 1985, tác phẩm The C++ Programming Language được xuất bản lần đầu tiên, cung cấp một tài liệu tham khảo quan trọng cho ngôn ngữ nhưng đó chưa là một tiêu chuẩn chính thức.

Năm 1989 phiên bản C++ 2.0 phát hành. Các tính năng mới bao gồm đa kế thừa, lớp trừu tượng, hàm tĩnh, hàm thành viên hằng và thành viên bảo tồn.

Năm 1990, cuốn The Annotated C++ Reference Manual được xuất bản cung cấp nền tảng cho tiêu chuẩn tương lai.

Phiên bản xuất bản sau đó có thêm các chức năng tiêu bản, ngoại lệ, không gian tên, chuyển kiểu cho toán tử new và kiểu Boolean.

Khi C++ hình thành, thì thư viện chuẩn hoàn thiện với nó. Thư viện C++ đầu tiên thêm vào là iostream.h cung cấp cơ sở để thay thế các hàm C truyền thống như là printf và scanf. Sàu này, trong những thư viện chuẩn quan trọng nhất được thêm vào là Thư viện Tiêu bản Chuẩn.

Sau nhiều năm làm việc, có sự cộng tác giữa ANSI và hội đồng tiêu chuẩn hoá C++ của ISO để soạn thảo tiêu chuẩn ISO/IEC 14882:1998. Phiên bản tiêu chuẩn này được phát hành năm 1989, hội đồng tiếp tục xử lý các báo cáo trục trặc, và ấn hành một phiên bản sửa sai của chuẩn C++ trong năm 2003.

Không ai là chủ nhân của ngôn ngữ C++, nó hoàn toàn miễn phí khi dùng. Mặc dù vậy, các văn bản tiêu chuẩn thì không miễn phí.

Lịch sử của tên "C++"

Tên C++ được đặt ra bởi Rick Mascitti (giữa 1983) và lần đầu tiên được dùng trong tháng 12 1983. Trước đó, trong suốt thời kì nghiên cứu, khi ngôn ngữ phát triển đã được đề cập như là "C với các lớp". Toán tử ++ được nối vào với tên "C" (có nghĩa là tăng giá trị của C lên 1 đơn vị) được dùng theo cách đặt tên thông thường của việc dùng dấu + với ý nghĩa "nâng cao". Ví dụ: "Wikipedia+". Sau này phiên bản ngôn ngữ lập trình cao hơn dựa trên nền tảng của C và C++ được gọi là C#, tương ứng với 4 dấu +.

Theo Stroustrup thì:

Cái tên C++ nhấn mạnh sự tiến hóa tự nhiên của các thay đổi từ C. C+ là tên của một ngôn ngữ lập trình cũ và không liên quan gì đến C hay C++.

Sự phát triển trong tương lai

C++ tiếp tục phát triển để thỏa mãn các nhu cầu tương lai. Đặc biệt nhóm Boost.org, làm việc trên hầu hết các dạng và các khuyến cáo trong C++ cho Hội đồng Tiêu chuẩn C++ về các chức năng hoạt động tốt và các chức năng cần được cải thiện. Công việc hiện tại cho thấy bản năng đa mẫu hình của C++ sẽ ngày càng nhiều. 

Ví dụ: Công việc của Boost.org mở rộng rất mạnh chức năng của C++ và khả năng siêu lập trình (metaprogramming) của nó. Chuẩn C++ không đề cập về sự thiết lập của mã hóa tên (name decoration), xử lý ngoại lệ và sự thiết lập các tính năng đặc biệt khác, tạo mã đối tượng mà nó được làm ra từ những trình biên dịch không tương thích khác. Dù vậy, vẫn có những tiêu chuẩn khác từ các nhà sản xuất dùng cho những máy hay OS riêng biệt nhằm tiêu chuẩn hóa các trình biên dịch trên các nền tảng đó.

Các trình biên dịch cho đến gần đây (2004) vẫn lưỡng lự khi hỗ trợ toàn bộ chuẩn C++, đặc biệt là trong những lãnh vực của tiêu bản (đây là phần ngôn ngữ đã được công nhận hoàn toàn từ hội đồng tiêu chuẩn. Một điểm các biệt đáng nói nữa là từ khóa export, nhằm cho phép các định nghĩa của các tiêu bản được tách rời khỏi các khai báo của chúng. Trình biên dịch đầu tiên thiết kế kiểu này là Comeau C++, đầu năm 2003 (5 năm sau khi tiêu chuẩn đã được phát hành!); trong năm 2004, phiên bản beta trình biên dịch của Borland C++ Builder X cũng hỗ trợ dùng export. Cả hai trình biên dịch đó dựa trên phần tương tác ngoại vi (front-end) của EDG C++. Cũng cần lưu ý rằng nhiều sách cung cấp mã.

Ví dụ: Cho việc thiết lập từ khóa export (Ivor Horton's Beginning ANSI C++, pg. 827) mà lại không dịch được, nhưng lại cũng không có tham khảo vấn đề này với việc (khó khăn) đã nêu trên. Những trình biên dịch khác như là Microsoft Visual C++ và GCC thì hoàn toàn không hỗ trợ nó. Herb Sutter, thư ký hội đồng tiêu chuẩn C++, có khuyến cáo rằng export sẽ được hủy bỏ trong các phiên bản tương lai của chuẩn C++. Lưu trữ 2011-06-07 tại Wayback Machine. Nhưng quyết định tối hậu đã được đưa ra là giữ nguyên nó trong chuẩn C++.

Nhiều vấn đề về tiêu bản bao gồm các xây dựng như đặc biệt hóa tiêu bản từng phần, mà đã được hỗ trợ một cách nghèo nàn trong nhiều năm sau khi chuẩn C++ đã ra đời.

  • Tính đóng gói

C++ xây dựng tính đóng bằng cách cho phép mọi thành viên của một lớp có thể được khai báo bằng các từ khoá public, private hay protected. 

  • Tính đa hình

Khái niệm đa hình được dùng khá rộng rãi và là khái niệm bị lạm dụng cũng như không được định nghĩa rõ ràng. Nói chung tính đa hình trong lập trình hướng muốn nói đến 1 đoạn code nhưng trong 2 trường hợp khác nhau có thể xuất ra 2 kết quả khác nhau. Vì tính chất ra nhiều kết quả khác nhau này nên nó được gọi là đa hình.

  • Tính kế thừa

Kế thừa từ một lớp cơ sở có thể được khai báo thông qua các đặc tính công cộng, bảo tồn, hay riêng tư. Những đặc tính này cho phép xác định khi nào các lớp dẫn xuất hay không liên quan có thể sử dụng các thành viên công cộng, bảo tồn, hay riêng tư của lớp cơ sở. Tuy nhiên, chỉ có sự kế thừa dạng công cộng là hoàn toàn theo đúng ý nghĩa của việc "kế thừa". Hai dạng khác thì ít được dùng hơn. Nếu các đặc tả này không được khai báo thì việc kế thừa được gán mặc định là dạng riêng tư cho lớp cơ sở và dạng công cộng cho một cấu trúc cơ sở.

  • Ngôn ngữ lập trình này được ISO công nhận chuẩn hóa đầu tiền vào năm 1998 với tên gọi là dạng ISO/ IEC 14882: 1998.
  • Sau đó là C++ 03, C++ 11 và C++ 14.
  • Tháng 12 năm 2017 tổ chức tiêu chuẩn quốc tế (ISO) đã công nhận và chuẩn hóa phiên bản mới nhất của C++ là ISO/ IEC 14882: 2017 (gọi tắt là C++ 17). Và kế hoạch tiếp theo sẽ là C++ 20.

C++ là ngôn ngữ lập trình dạng tự do, nó được biên soạn, phân biệt chữ hoa chữ thường, gõ tĩnh, hỗ trợ trình thủ tục, hướng đến những đối tượng chung. Ngôn ngữ có một thư viên tiêu chuẩn phong phú với một tập hợp các hàm phong phú thao tác các tệp và phương thức thao tác các cấu trúc dữ liệu,… C++ được sử dụng rộng rãi trong công việc lập trình của các lập trình viên hoặc nhà phát triển chủ yếu trong một miền của ứng dụng. Vì lẽ, ngôn ngữ C++ chưa đựng những phần quan trọng bao gồm những ngôn ngữ cốt lõi, các khối xây dựng cần thiết,…

Phiên bản C++. (Nguồn: dizibrand.com)

  • Ứng dụng Games

C++ là sự lựa chọn tốt để tăng trưởng các nền tảng game 3D. Cho phép tối ưu hóa việc quản lý tài nguyên và mượt mà trong nền tảng nhiều người chơi trên cùng mạng – multi-player. C++ cho phép can thiệp sâu vào CPU cũng như phần cứng. đấy cũng là yếu tố quan trọng trong việc tăng trưởng các game engines.

  • Ứng dụng có bố cụ và giao diện người dùng(GUI)

Có không hề ít ứng dụng giao diện mà đằng sau nó được viết bằng C++. Một vài ứng dụng phổ biến có khả năng kể tới là: Image Ready, Adobe Premier, Photoshop và Illustrator.

  • Trình duyệt

Tốc độ và độ tin cậy là tiêu chí cần phải có với các trình duyệt web. Khi đó, C++ sẽ là ngôn ngữ được ưu tiên sử dụng. Một phần của trình duyệt web Google chrome và một vài website browsers mã nguồn mở như Moliza Firefox, áp dụng email Mozilla Thunderbird có sự đóng góp của ngôn ngữ C++.

  • Ứng dụng tính toán và đồ họa

Ngôn ngữ lập trình C++ cho phép triển khai các ứng dụng đòi hỏi yếu tố thời gian thực. Chẳng hạn như các áp dụng mô phỏng 3D, giải quyết hình ảnh hiệu suất cao hay các ứng dụng cảm biến trên điện thoại di động. Hay các ứng dụng giải quyết, mô phỏng 3D, hiệu ứng và hoạt ảnh đều được xây dựng bằng C++.

  • Ứng dụng quản trị cơ sở dữ liệu

C và C++ được dùng cho hệ quản trị cơ sở dữ liệu MySQL. Đây là một trong các hệ quản trị cơ sở dữ liệu phổ biến nhất. Nó là xương sống cho nhiều ứng dụng của các doanh nghiệp lớn như Google, Yahoo, Youtube, Wikipedia,…

  • Hệ điều hành

C++ thuộc một phần cần thiết trong nhiều hệ điều hành phổ biến như Apple OSX và MS Windows.

  • Phần mềm doanh nghiệp

C++ thường được dùng trong các ứng dụng lớn của các doanh nghiệp. Nơi mà yêu tố hiệu suất và tốc độ luôn được đặt lên trên hết.

  • Trình biên dịch

Một loạt các trình biên dịch bao gồm Apple C++, Bloodshed Dev-C++, Clang C++ và MINGW make đều sử dụng ngôn ngữ lập trình C++. Không chỉ vậy, C và C++ còn là ngôn ngữ nền tảng hỗ trợ xây dựng các ngôn ngữ lập trình mới như C#, Java, PHP, Verilog,…