C++
C++ (C Plus Plus, CPP, IPA: /siː pləs pləs/) là một ngôn ngữ lập trình đa năng bậc cao (high-level) được tạo ra bởi Bjarne Stroustrup như một phần mở rộng của ngôn ngữ lập trình C, hoặc "C với các Class", Ngôn ngữ đã được mở rộng đáng kể theo thời gian và C ++ hiện đại có các tính năng: lập trình tổng quát, lập trình hướng đối tượng, lập trình thủ tục, ngôn ngữ đa mẫu hình tự do có kiểu tĩnh, dữ liệu trừu tượng, và lập trình đa hình, ngoài ra còn có thêm các tính năng, công cụ để thao tác với bộ nhớ cấp thấp. Từ thập niên 1990, C++ đã trở thành một trong những ngôn ngữ thương mại ưa thích và phổ biến của lập trình viên. C++ được thiết kế hướng tới lập trình hệ thống máy tính và phần mềm nhúng trên các mạch vi xử lý, bao gồm cả hệ thống có tài nguyên hạn chế và tài nguyên khổng lồ, với ưu điểm vượt trội về hiệu suất, hiệu quả và tính linh hoạt cao.[6] C++ có thể tìm thấy ở mọi nơi, với những điểm mạnh là cơ sở hạ tầng phần mềm và các ứng dụng bị hạn chế tài nguyên. bao gồm: phần mềm ứng dụng máy tính cá nhân, trò chơi điện tử, các hệ thống máy chủ (ví dụ: phần mềm thương mại điện tử, cỗ máy tìm kiếm trên web hoặc máy chủ SQL) và các ứng dụng ưu tiên về hiệu suất (ví dụ: tổng đài thông tin liên lạc hoặc thiết bị thăm dò không gian).[7] C++ hầu hết được thực thi dưới dạng là một ngôn ngữ biên dịch, có thể chạy trên nhiều nền tảng khác nhau như Windows, Mac OS, Linux, các phiên bản Unix. Nhiều nhà cung cấp cung cấp các trình biên dịch C++, bao gồm Tổ chức Phần mềm Tự do, Microsoft, Intel và IBM. C++ được Tổ chức Tiêu chuẩn hóa Quốc tế (ISO) chuẩn hóa, với phiên bản tiêu chuẩn mới nhất được ISO phê chuẩn và công bố vào tháng 12 năm 2017 là ISO / IEC 14882: 2017 (được gọi một cách không chính thức là C++ 17).[8] Ngôn ngữ lập trình C++ ban đầu được chuẩn hóa vào năm 1998 là ISO / IEC 14882: 1998, sau đó được sửa đổi theo tiêu chuẩn C++ 03, C++ 11 và C++ 14. Tiêu chuẩn C++ 17 hiện tại thay thế các tính năng mới này và một thư viện tiêu chuẩn mở rộng. Trước khi tiêu chuẩn hóa ban đầu vào năm 1998, C++ được phát triển bởi Bjarne Stroustrup tại Bell Labs từ năm 1979, như một phần mở rộng của ngôn ngữ C khi ông muốn một ngôn ngữ hiệu quả và linh hoạt tương tự như C, cũng cung cấp các tính năng cấp cao cho tổ chức chương trình.[9] C++ 20 là tiêu chuẩn được lên kế hoạch tiếp theo sau đó, phù hợp với chuỗi hiện tại của một phiên bản mới cứ sau ba năm.[10] Nhiều ngôn ngữ lập trình khác được phát triển dựa trên nền tảng C++, bao gồm C#, D, Java và các phiên bản mới hơn của C. Chương trình Hello World đầu tiênChương trình Hello World là một chương trình đơn giản nhất của mọi ngôn ngữ lập trình #include <iostream>
int main() {
std::cout << "Hello World" << std::endl;
return 0;
}
Tổng quan về kỹ thuật![]()
Trong tiêu chuẩn 1998 của C++ có hai phần chính: phần ngôn ngữ cốt lõi và phần Thư viện chuẩn C++ (STL - Standard Template Library). Phần thư viện này lại bao gồm hầu hết thư viện tiêu bản chuẩn và phiên bản có điều chỉnh chút ít của thư viện chuẩn C. Nhiều thư viện C++ hiện hữu không thuộc về tiêu chuẩn như là thư viện Boost. Thêm vào đó, nhiều thư viện không theo tiêu chuẩn được viết trong C một cách tổng quát đều có thể sử dụng trong các chương trình C++. Chức năng dẫn nhập trong C++So với C, C++ tăng cường thêm nhiều tính năng, bao gồm: khai báo như mệnh đề, chuyển kiểu giống như hàm, C++ còn tiến hành nhiều phép kiểm tra kiểu hơn C trong nhiều trường hợp. Câu lệnh chú giải bắt đầu với Một số thành phần của C++ sau này đã được thêm vào C, bao gồm Vì được phát triển từ C, trong C++, thuật ngữ đối tượng có nghĩa là vùng nhớ như được dùng trong C, chứ không phải là một phiên bản của lớp như được hiểu trong phần lớn ngôn ngữ lập trình hướng đối tượng khác. Ví dụ như:
Dòng trên sẽ định nghĩa một đối tượng kiểu Thư viện C++Thư viện chuẩn C++ dùng lại thư viện chuẩn C với một số điều chỉnh nhỏ để giúp nó hoạt động tốt hơn với ngôn ngữ C++. Một bộ phận lớn khác của thư viện C++ dựa trên Thư viện tiêu bản chuẩn (hay còn gọi là STL - viết tắt từ chữ Standard Template Library). Thư viện này có nhiều công cụ hữu dụng như là các thùng chứa (ví dụ như vector, danh sách liên kết và biến lặp (tổng quát hóa từ khái niệm con trỏ) để cung cấp những thùng chứa này sự truy cập giống như là truy cập mảng. Xa hơn nữa, bảng (đa) ánh xạ (mảng kết hợp) và (đa) tập, tất cả được cung cấp để có thể xuất ra các giao diện tương thích. Do đó, có thể dùng tiêu bản để viết các thuật toán tổng quát mà chúng làm việc được với bất kì thùng chứa nào hay với bất kì dãy nào được định nghĩa bởi biến lặp. Giống như C, các tính năng của thư viện này thì được truy cập bởi việc sử dụng lệnh dẫn hướng Vì thư viện chuẩn được thiết kế bởi những chuyện gia hàng đầu và đã được chứng minh trong toàn bộ lịch sử kĩ nghệ, các thành phần của thư viện này được khuyến cáo sử dụng thay vì dùng những phần viết tay bên ngoài hay những phương tiện cấp thấp khác. Ví dụ, dùng STL nguyên là một thư viện của hãng HP và sau đó là của SGI, trước khi nó được nhận vào thành chuẩn C++. Tiêu chuẩn thì không tham chiếu nó bằng cái tên "STL", khi đa phần nó chỉ là bộ phận tiêu chuẩn. Tuy vậy, nhiều người vẩn dùng khái niệm "STL" này để phân biệt nó với phần còn lại của thư viện C++ như là Một đề án mang tên STLPort, dựa cơ sở trên SGI STL, bảo trì các thiết lập mới của C++ Các chức năng hướng đối tượngC++ dẫn nhập thêm một số chức năng hướng đối tượng (OO) lên C. Nó cung cấp các lớp mà có 4 chức năng thông dụng trong các ngôn ngữ OO: tính trừu tượng, tính đóng gói, tính đa hình, và tính kế thừa. Lưu ý: trong phần này các từ "hàm nội tại", "phương pháp", hay "hàm" đều có cùng một nghĩa là "phương thức thuộc về một lớp". Tính đóng góiC++ 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á Nguyên lý của OOP là mọi và chỉ có các hàm là có thể truy cập được đến các giá trị nội tại của cùng lớp thì nên có tính đóng. C++ có hỗ trợ đặc tính này (qua các hàm thành viên và các hàm Một thói quen tốt cần có trong thực hành là khai báo mọi dữ liệu đều là riêng tư (private), hay ít nhất ở dạng bảo tồn, và sau đó, tạo ra một giao diện nhỏ (thông qua các phương pháp) cho người dùng của lớp này giấu đi các chi tiết thiết lập bên trong. Tính đa hìnhKhá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. Trong trường hợp của C++, khái niệm này thường được nối kết với các tên của các hàm thành viên. Các hàm thành viên này có cùng tên, sự khác nhau chỉ có thể được dựa vào một hay cả hai yếu tố sau:
Khi được gọi thì chương trình sẽ tùy theo hai yếu tố trên để xác định chính xác hàm nào phải được thực thi trong số các hàm cùng tên. Ví dụ sau đây mô tả tính đa hình: /* Static polymorphism */
extern int SendJobToDevice(PrintJobText *, DeviceLaser *);
extern void SendJobToDevice(PrintJobText *, DeviceJet *);
extern void SendJobToDevice(PrintJobHTML *, DeviceLaser *);
extern void SendJobToDevice(PrintJobHTML *, DeviceJet *);...
SendJobToDevice(printJob, device);
/* Dynamic polymorphism */
class Device {
public:
virtual void print(PrintJob*);...
};
PrintJob *printJob;
Device *device;...
device->print(printJob);
// Note that since C++ does not have multiple dispatch, the above
// function call is polymorphic based only on the device's type.
Ví dụ thứ hai về tính đa hình động: class Nguoi
{
public:
virtual void Chao() // Hàm ảo
{
cout << "Toi chua biet chao";
};
};
//------------------
class NguoiViet: public Nguoi
{
public:
void Chao()
{
cout << "Xin chao.";
}
};
//------------------
class NguoiAnh: public Nguoi
{
public:
void Chao()
{
cout << "Hello.";
}
};
//------------------
int main()
{
cout<<"Toi la Nguyen Huy Hoang\n";
Nguoi *n; NguoiViet nv; NguoiAnh na;
n = &nv;
n->Chao(); // (*)
n = &na;
n->Chao(); // cùng dòng code voi (*) nhưng lại cho kết quả khác
return 0;
}
Trong C, thì đa hình (động) có thể đạt tới bằng cách dùng từ khóa C++ còn cung cấp hai tính năng độc đáo cho đa hình là:
Ví dụ, ta có thể định nghĩa hai hàm trùng tên như sau: Ta cũng có thể tải bội phép cộng cho lớp MATRIX để có thể viết được
Hai tính năng trên cho phép chương trình định ra nhiều sự thiết lập khác nhau của một hàm để sử dụng ứng với các kiểu (khác nhau) của các đối tượng. Việc quá tải hàm cho phép các chương trình khai báo nhiều hàm có chung một tên (ngay cả việc các hàm này thuộc cùng một lớp). Các hàm này phân biệt được bởi số lượng và kiểu của các tham số. Ví dụ, một chương trình có thể có khai báo 3 hàm sau: void pageUser(int userid);
void pageUser(int userid, string message);
void pageUser(string username);
Sau, đó, khi trình dịch đọc phải câu lệnh có gọi tới hàm Chú ý: trình dịch sẽ không phân biệt khác nhau về kiểu trả về, do đó không thể quá tải hai hàm hoàn toàn giống nhau trong cùng một lớp mà lại chỉ khác nhau về kiểu trả về. Quá tải toán tử (operation overloading) là một dạng của quá tải hàm. Nó là một trong những đặc tích của C++ bị nhiều tranh cãi nhất. Nhiều người cho rằng việc quá tải toán tử đã bị lạm dụng quá đáng, nhưng nhiều người khác nghĩ rằng đây là công cụ rất mạnh để tăng cường sự biểu thị (qua ký các hiệu toán tử). Toán tử là một trong những ký hiệu đã được định nghĩa trong ngôn ngữ C++ đóng vai trò của các toán tử để thực hiện các phép toán trên các kiểu dữ liệu. Quá tải toán tử được hiểu là quá trình hay phương thức để tái sử dụng một toán tử sẵn có để định nghĩa và dùng cho một phép toán khác.
Danh sách các toán tử có thể thực hiện quá tải + - * / = < > += -= *= /= << Việc quá tải hàm cho phép người lập trình định nghĩa nhiều phiên bản khác nhau của một hàm để dùng với các kiểu đối số khác nhau trong khi việc quá tải toán tử lại cho phép người lập trình định nghĩa nhiều phiên bản khác nhau của một toán tử để dùng với các kiểu phép toán khác nhau.
thì chương trình này có thể dùng toán tử ++ với các đối tượng của kiểu Integer a = 2;
++a;
sẽ ứng xử tương đương với: Integer a = 2;
a.operator++();
Trong phần lớn trường hợp, đoạn mã nguồn trên sẽ làm tăng giá trị của biến Tiêu bản C++ sử dụng rất nhiều tính đa hình tĩnh, trong đó bao gồm cả các toán tử được quá tải. Hàm ảo cung cấp một kiểu đa hình khác. Trong trường hợp này, các đối tượng có cùng một lớp cơ sở có thể sử dụng một hàm một cách khác nhau. Ví dụ, lớp cơ sở
Mỗi cách khác nhau của công việc in như là Khi một hàm thành viên ảo của một đối tượng được gọi thì trình dịch đôi khi không được kiểu của đối tượng này ở thời gian dịch và do đó không thể xác định hàm (quá tải) nào để gọi. Quyết định gọi này bởi vậy phải để vào thời gian thực thi. Trình dịch sẽ tạo ra các mã để kiểm tra lại kiểu của đối tượng ở thời gian thi hành và từ đó xác định hàm nào để gọi. Bởi vì việc xác định hàm chỉ xảy ra lúc chạy chương trình nên phương pháp quá tải hàm này được gọi là đa hình động. Sự xác định và thi hành của một hàm trong thời gian thực thi gọi là điều phối động. Trong C++, việc này thường hoàn tất bằng cách dùng các bảng ảo. Tính kế thừaKế 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ở. Các lớp cơ sở có thể được khai báo là ảo (thông qua từ khóa Đa kế thừa cũng là một tính năng có nhiều tranh cãi trong C++. Tính đa kế thừa cho phép một lớp được dẫn xuất từ nhiều hơn một lớp cơ sở; điều này có thể dẫn tới một đồ thị phức tạp của các quan hệ kế thừa. Ví dụ, lớp "Buổi học" có thể kế thừa từ hai lớp "thời gian" và "bộ môn". Một số ngôn ngữ khác như Java, tiến hành cách thức tương tự bằng cách cho phép kế thừa của nhiều Thiết kế của C++Trong tác phẩm The Design and Evolution of C++ ISBN 0-201-54330-3, Bjarne Stroustrup miêu tả các quy tắc mà ông ta dùng cho việc thiết kế C++. Biết rõ các quy tắc này sẽ giúp hiểu được tại sao C++ lại đi theo cách riêng của nó. Sau đây là một tổng kết sơ lược của các quy tắc. Các chi tiết của chúng có thể được tìm thấy trong cuốn The Design and Evolution of C++.
Đọc thêm:
Lịch sử C++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 ( 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ử 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à 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í. Sự phát triển trong tương laiC++ 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 đó, Ví dụ [1]. 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 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. 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á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++. C++ không phải là C mở rộngTrong khi nhiều mã nguồn viết trong C sẽ được dịch như là ngôn ngữ C++ mà không gặp trở ngại gì thì cũng có một số khác nhau giữa hai ngôn ngữ đã ngăn không cho C++ trở thành (ngôn ngữ) mở rộng của C. Chẳng hạn như C++ cấm gọi hàm Một vấn đè thường xảy ra khi chuyển dịch từ C sang C++ là nhiều từ khoá được thêm vào trong C++. Điều này có thể làm cho một số tên trong C trở thành bất hợp lệ trong C++. Ví dụ: struct template {
int new;
struct template *class;
};
hợp lệ trong C nhưng không dùng được trong C++ vì các từ khoá Sự khác nhau còn xảy ra trong kiểu trình bày. Ví dụ như trong một cách cũ và truyền thống của việc khai báo trong C sau đây sẽ không được chấp thuận trong C++: int subtract(minuend, subtrahend)
int minuend;
int subtrahend;
{
return minuend - subtrahend;
}
Theo yêu cầu mới trong C++ nên viết thành: int subtract(int minuend, int subtrahend)
{
return minuend - subtrahend;
}
Xem thêm chi tiết trong phần quan hệ với C++ của bài ngôn ngữ C. Các ví dụ trong C++Các ví dụ đơn giảnHai chương trình đơn giản sau đây có thể chạy trong C++ dù không thực hiện điều gì có ý nghĩa: #include<iostream>
int main()
{
return 0;
}
Nhiều khi việc đưa vào các tham số cho hàm main (để dùng lúc khởi động chương trình) là cần thiết: int main(int argc, char *argv[])
{
return 0;
}
Trong đó, Lưu ý:
Hello World!Đây là ví dụ Hello World (Chào thế giới) dùng hàm #include <iostream> // Required for std::cout
using namespace std; // For std library
int main()
{
cout << "Hello World!" << endl;
}
Đọc bàn phím và hiển thị ra màn hình chuẩnVí dụ sau: #include <iostream>
using namespace std;
int main()
{
int response;
std::cout << "Are you feeling well? (1=Yes, 2=No)" << std::flush;
std::cin >> response;
if (response == 1) {
std::cout << "I am glad that you are fine.\n";
}
else {
std::cout << "Oh, I am so sorry.\n";
}
}
// kết quả thì hên xui nha
Ví dụ này hiển thị câu hỏi; người dùng đưa vào thông báo trả lời và máy sẽ đọc vào biến Viết theo mẫu hình tiêu bảnC++ hỗ trợ nhiều mẫu hình lập trình, người lập trình có thể tùy nghi lựa chọn cho mình mẫu hình nào thích hợp hoặc lựa chọn ngay cả việc lập trình dùng đa mẫu hình. Ví dụ sau đây dùng mẫu hình Lập trình tiêu bản: C++ hiện đại có thể hoàn tất các thao tác khó trong một phương cách đơn giản. Ví dụ sau đây dùng Thư viện bản Tiêu Chuẩn. Đó là thùng chứa #include <iostream> // std::cout
#include <ostream> // operator <<
#include <vector> // std::vector<>
#include <map> // std::map<> and std::pair<>
#include <algorithm> // std::for_each()
#include <string> // std::string
using namespace std; // import "std" namespace into global namespace
void display_item_count(pair< string const, vector<string> > const& person)
{
// person is a pair of two objects: person.first is person's name,
// person.second is a list of person's items (vector of strings)
cout << person.first << " is carrying "
<< person.second.size() << " items" << endl;
}
int main()
{
// Declare a map with string keys and vectors of strings as data
map< string, vector<string> > items;
// Add some people to the map and let them carry some items
items["Anya"].push_back("scarf");
items["Dimitri"].push_back("tickets");
items["Anya"].push_back("puppy");
// Iterate over all the items in the container
for_each(items.begin(), items.end(), display_item_count);
return 0;
}
Viết theo mẫu hình hướng đối tượng![]() Lưu ý:
Xem thêm
Tham khảo
Liên kết ngoài
Hướng dẫn
Trình dịch
Sách
Trợ huấn
Thông tin về các chuẩn
Các thư viện và tài liệu liên đới
Các trang web liên quan
Diễn đàn
Tạp chíCộng đồngKhác
![]() Wikimedia Commons có thêm hình ảnh và phương tiện về C++. |
Portal di Ensiklopedia Dunia