markdown:
# C++
|Bài viết này
|cần thêm .
|
|
## Mục lục
**C++** (đọc là "C cộng cộng" hay "xi-plus-plus", [IPA](/wiki/B%E1%BA%A3ng_m%E1%BA%ABu_t%E1%BB%B1_phi%C3%AAn_%C3%A2m_qu%E1%BB%91c_t%E1%BA%BF): /siː pləs pləs/) là một loại [ngôn ngữ lập trình](/wiki/Ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh). Đây là một dạng [ngôn ngữ đa mẫu hình](/w/index.php?title=Ng%C3%B4n_ng%E1%BB%AF_%C4%91a_m%E1%BA%ABu_h%C3%ACnh&action=edit&redlink=1) tự do có [kiểu tĩnh](/wiki/Ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh#STATIC) và hỗ trợ [lập trình thủ tục](/wiki/L%E1%BA%ADp_tr%C3%ACnh_th%E1%BB%A7_t%E1%BB%A5c), [dữ liệu trừu trượng](/w/index.php?title=D%E1%BB%AF_li%E1%BB%87u_tr%E1%BB%ABu_tr%C6%B0%E1%BB%A3ng&action=edit&redlink=1), [lập trình hướng đối tượng](/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C6%B0%E1%BB%9Bng_%C4%91%E1%BB%91i_t%C6%B0%E1%BB%A3ng), và [lập trình đa hình](/w/index.php?title=L%E1%BA%ADp_tr%C3%ACnh_%C4%91a_h%C3%ACnh&action=edit&redlink=1). Từ [thập niên 1990](/wiki/Th%E1%BA%ADp_ni%C3%AAn_1990), C++ đã trở thành một trong những ngôn ngữ thương mại phổ biến nhất trong khi đó. [Bjarne Stroustrup](/wiki/Bjarne_Stroustrup) của [Bell Labs](/w/index.php?title=Bell_Labs&action=edit&redlink=1) đã phát triển C++ (mà tên nguyên thủy là " *C với các lớp*" trong suốt [thập niên 1980](/wiki/Th%E1%BA%ADp_ni%C3%AAn_1980)như là một bản nâng cao của ngôn ngữ [C](/wiki/C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)). Những bổ sung nâng cao bắt đầu với sự thêm vào của khái niệm lớp, tiếp theo đó là các khái niệm [hàm ảo](/w/index.php?title=H%C3%A0m_%E1%BA%A3o&action=edit&redlink=1), [chồng toán tử](/w/index.php?title=Ch%E1%BB%93ng_to%C3%A1n_t%E1%BB%AD&action=edit&redlink=1), [đa kế thừa](/w/index.php?title=%C4%90a_k%E1%BA%BF_th%E1%BB%ABa&action=edit&redlink=1), [tiêu bản](/w/index.php?title=L%E1%BA%ADp_tr%C3%ACnh_ti%C3%AAu_b%E1%BA%A3n&action=edit&redlink=1), và [xử lý ngoại lệ](/w/index.php?title=X%E1%BB%AD_l%C3%BD_ngo%E1%BA%A1i_l%E1%BB%87&action=edit&redlink=1). Tiêu chuẩn của ngôn ngữ C++ đã được thông qua trong năm [1998](/wiki/1998)như là *. Phiên bản hiện đang lưu hành là phiên bản* [ISO/IEC 14882](/w/index.php?title=ISO/IEC_14882&action=edit&redlink=1):1998 [C++14](/w/index.php?title=C%2B%2B14&action=edit&redlink=1), *. Hiện tại tiêu chuẩn mới nhất của ngôn ngữ C++ là* [ISO/IEC 14882](/w/index.php?title=ISO/IEC_14882&action=edit&redlink=1):2014 [[1]](#cite_note-1) [C++14](/w/index.php?title=C%2B%2B14&action=edit&redlink=1), phát hành ngày 15/12/2014 (ghi theo định dạng ISO 8601 là 2014-12-15). Và C++ còn là ngôn ngữ được cải tiến từ C
## Tổng quan về kỹ thuật[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=1) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=1)]
Trong
[tiêu chuẩn](/w/index.php?title=Ti%C3%AAu_chu%E1%BA%A9n&action=edit&redlink=1) [1998](/wiki/1998) của C++ có hai phần chính: phần [ngôn ngữ cốt lõi](/w/index.php?title=Ng%C3%B4n_ng%E1%BB%AF_c%E1%BB%91t_l%C3%B5i&action=edit&redlink=1) và phần [Thư viện chuẩn C++](/wiki/Th%C6%B0_vi%E1%BB%87n_chu%E1%BA%A9n_C%2B%2B)(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](/w/index.php?title=Th%C6%B0_vi%E1%BB%87n_ti%C3%AAu_b%E1%BA%A3n_chu%E1%BA%A9n&action=edit&redlink=1) 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](/w/index.php?title=Th%C6%B0_vi%E1%BB%87n_Boost&action=edit&redlink=1). Thêm vào đó, nhiều thư viện không theo tiêu chuẩn được viết trong [C](/wiki/C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)) 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++[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=2) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=2)]
So với C, C++ tăng cường thêm nhiều tính năng, bao gồm:
[khai báo](/w/index.php?title=Khai_b%C3%A1o&action=edit&redlink=1) như mệnh đề, chuyển kiểu giống như hàm,
new/
delete,
bool, các kiểu tham chiếu,
const, các hàm nội tuyến (
inline), các đối số mặc định, nạp chồng hàm,
[không gian tên](/wiki/Kh%C3%B4ng_gian_t%C3%AAn) (
namespace), các lớp (bao gồm tất cả các chức năng liên quan tới lớp như kế thừa, hàm thành viên (phương pháp), hàm ảo, lớp trừu tượng, và cấu tử), nạp chồng toán tử, tiêu bản, toán tử phạm vi
::, xử lí ngoại lệ, và sự nhận dạng kiểu trong thời gian thi hành.
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](/wiki/Ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh#COMMENT) bắt đầu với
// nguyên là một phần của
[BCPL](/w/index.php?title=BCPL&action=edit&redlink=1) được tái sử dụng trong C++.
Một số thành phần của C++ sau này đã được thêm vào C, bao gồm
const,
inline, khai báo biến trong vòng lặp
for và chú giải kiểu C++ (sử dụng ký hiệu
//). Tuy nhiên,
[C99](/wiki/C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)#C99) cũng bổ sung thêm một số tính năng không có trong C++, ví dụ như [macro](/w/index.php?title=Macro&action=edit&redlink=1) với số [đối số](/wiki/Tham_s%E1%BB%91_(khoa_h%E1%BB%8Dc_m%C3%A1y_t%C3%ADnh)) động.
Vì được phát triển từ C, trong C++, thuật ngữ
[đối tượng](/wiki/%C4%90%E1%BB%91i_t%C6%B0%E1%BB%A3ng) 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ư:
-
int i;
Dòng trên sẽ định nghĩa một đối tượng kiểu
int (
[số nguyên](/wiki/S%E1%BB%91_nguy%C3%AAn)), tức là một vùng nhớ sẽ được sử dụng để lưu giữ biến
i.
### Thư viện C++[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=3) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=3)] [Thư viện chuẩn C++](/wiki/Th%C6%B0_vi%E1%BB%87n_chu%E1%BA%A9n_C%2B%2B) 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](/w/index.php?title=Th%C6%B0_vi%E1%BB%87n_ti%C3%AAu_b%E1%BA%A3n_chu%E1%BA%A9n&action=edit&redlink=1) (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](/w/index.php?title=Th%C3%B9ng_ch%E1%BB%A9a_(c%E1%BA%A5u_tr%C3%BAc_d%E1%BB%AF_li%E1%BB%87u)&action=edit&redlink=1) (ví dụ như [vector](/wiki/Vect%C6%A1), [danh sách liên kết](/w/index.php?title=Danh_s%C3%A1ch_li%C3%AAn_k%E1%BA%BFt&action=edit&redlink=1) và [biến lặp](/w/index.php?title=Bi%E1%BA%BFn_l%E1%BA%B7p&action=edit&redlink=1) (tổng quát hóa từ khái niệm [con trỏ](/w/index.php?title=Con_tr%E1%BB%8F&action=edit&redlink=1)) để 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](/w/index.php?title=M%E1%BA%A3ng_k%E1%BA%BFt_h%E1%BB%A3p&action=edit&redlink=1)) và (đa) tập, tất cả được cung cấp để có thể xuất ra các [giao diện](/w/index.php?title=Giao_di%E1%BB%87n&action=edit&redlink=1) 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](/w/index.php?title=L%E1%BB%87nh_d%E1%BA%ABn_h%C6%B0%E1%BB%9Bng&action=edit&redlink=1)
#include để bao gồm một tập tin
[tiêu đề chuẩn](/w/index.php?title=Ti%C3%AAu_%C4%91%E1%BB%81_chu%E1%BA%A9n&action=edit&redlink=1). C++ cung ứng 69 tiêu đề chuẩn, trong đó có 19 tiêu đề không còn hiệu lực nữa.
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
std:vector hay
std::string thay vì dùng kiểu mảng đơn thuần sẽ không những là cho "đời sống dễ thở hơn", mà còn là một cách hữu hiệu để viết phần mềm được an toàn và linh hoạt hơn.
STL nguyên là một thư viện của hãng
[HP](/wiki/Hewlett-Packard) và sau đó là của [SGI](/w/index.php?title=SGI&action=edit&redlink=1), 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à
IOstream, quốc tế hóa (kí tự và ngôn ngữ trình bày), chẩn đoán, thư viện C, v.v..
Một đề án mang tên STLPort, dựa cơ sở trên
[SGI](/w/index.php?title=SGI&action=edit&redlink=1) STL, bảo trì các thiết lập mới của
STL, IOStream và
string. Các đề án khác cũng có những xây dựng đặc thù riêng của thư viện chuẩn với các mục tiêu thiết kế khác nhau. Mỗi nơi sản xuất hay phổ biến nhà trình dịch C++ đều bao gồm một sự thiết lập của thư viện, vì đây là phần quan trọng của tiêu chuẩn và lại là kỳ vọng của người lập trình.
## C++ Các chức năng hướng đối tượng[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=4) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=4)]
C++ dẫn nhập thêm một số chức năng
[hướng đối tượng](/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C6%B0%E1%BB%9Bng_%C4%91%E1%BB%91i_t%C6%B0%E1%BB%A3ng) (OO) lên C. Nó cung cấp các [lớp](/w/index.php?title=L%E1%BB%9Bp_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1) mà có 4 chức năng thông dụng trong các ngôn ngữ OO: tính [trừu tượng](/w/index.php?title=Tr%E1%BB%ABu_t%C6%B0%C6%A1ng_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1), tính [bao đóng](/w/index.php?title=Gi%E1%BA%A5u_th%C3%B4ng_tin&action=edit&redlink=1), tính [đa hình](/w/index.php?title=%C4%90a_h%C3%ACnh_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1), và tính [kế thừa](/wiki/K%E1%BA%BF_th%E1%BB%ABa_(khoa_h%E1%BB%8Dc_m%C3%A1y_t%C3%ADnh)).
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 pháp](/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C6%B0%E1%BB%9Bng_%C4%91%E1%BB%91i_t%C6%B0%E1%BB%A3ng#Ph.C6.B0.C6.A1ng_ph.C3.A1p_.28method.29) thuộc về một lớp".
### Tính đóng gói[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=5) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=5)]
C++ xây dựng tính đóng bằng cách cho phép mọi
[thành viên](/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C6%B0%E1%BB%9Bng_%C4%91%E1%BB%91i_t%C6%B0%E1%BB%A3ng#CLASS) của một lớp có thể được khai báo bằng các từ khoá
public, private, hay
protected. (xem thêm
[các khái niệm cơ bản trong ngôn ngữ OOP](/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C6%B0%E1%BB%9Bng_%C4%91%E1%BB%91i_t%C6%B0%E1%BB%A3ng#M.E1.BB.99t_s.E1.BB.91_kh.C3.A1i_ni.E1.BB.87m_c.E1.BA.A7n_bi.E1.BA.BFt_trong_ng.C3.B4n_ng.E1.BB.AF_OOP_hi.E1.BB.87n_.C4.91.E1.BA.A1i)). Một thành viên
private chỉ có thể được truy cập từ các phương pháp (hàm nội tại) là thành viên của chính lớp đó hay được truy cập từ các hàm và các lớp được đặc biệt cho phép sử dụng bằng cách dùng từ khóa
friend. Một thành viên
protected của một lớp sẽ có thể truy cập được từ các thành viên (nào đó) của các lớp có tính kế thừa của nó hay cũng có thể truy cập được từ các thành viện của chính lớp đó và của mọi thành viên
friend.
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
friend), nhưng C++ lại không là yêu cầu bắt buộc: người lập trình có thể khai báo các phần hay tất cả các giá trị nội tại là công cộng (
*public*), và cũng cho phép làm cho toàn bộ lớp trở thành công cộng. Lí do là vì C++ hỗ trợ không chỉ lập trình hướng đối tượng mà còn hỗ trợ các [mẫu hình](/wiki/M%E1%BA%ABu_h%C3%ACnh) yếu hơn như là [lập trình mô-đun](/w/index.php?title=L%E1%BA%ADp_tr%C3%ACnh_m%C3%B4-%C4%91un&action=edit&redlink=1).
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ư](/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C6%B0%E1%BB%9Bng_%C4%91%E1%BB%91i_t%C6%B0%E1%BB%A3ng#Ri.C3.AAng_t.C6.B0_.28private.29) ( *private*), hay ít nhất ở dạng [bảo tồn](/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C6%B0%E1%BB%9Bng_%C4%91%E1%BB%91i_t%C6%B0%E1%BB%A3ng#B.E1.BA.A3o_t.E1.BB.93n_.28protected.29), 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 dấu đi các chi tiết thiết lập bên trong.
### Tính đa hình[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=6) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=6)]
Khái niệm
[đa hình](/w/index.php?title=%C4%90a_h%C3%ACnh_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1) đượ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:
- Số lượng và kiểu của các đối số (tức là nguyên mẫu của hàm) -- Tính chất này gọi là
**đa hình tĩnh**( *static polymorphism*)
- Kiểu lớp mà thực thể thực sự thuộc vào. Tính chất này được dùng khi hàm thành viên được định nghĩa là hàm
*ảo*qua từ khóa
virtual—tính chất này gọi là
**đa hình động**( *dynamic polymorphism*)
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:
1 /* Static polymorphism */ 2 3 extern int SendJobToDevice(PrintJobText *, DeviceLaser *); 4 extern void SendJobToDevice(PrintJobText *, DeviceJet *); 5 extern void SendJobToDevice(PrintJobHTML *, DeviceLaser *); 6 extern void SendJobToDevice(PrintJobHTML *, DeviceJet *);... 7 SendJobToDevice(printJob, device); 8 9 /* Dynamic polymorphism */ 10 11 class Device { 12 public: 13 virtual void print(PrintJob*);... 14 }; 15 16 PrintJob *printJob; 17 Device *device;... 18 device->print(printJob); 19 // Note that since C++ does not have multiple dispatch, the above 20 // function call is polymorphic based only on the device's type.
Ví dụ thứ hai về tính đa hình động:
1 class Nguoi 2 { 3 public: 4 virtual void Chao() // Hàm ảo 5 { 6 cout << "Toi chua biet chao"; 7 }; 8 }; 9 //------------------ 10 class NguoiViet: public Nguoi 11 { 12 public: 13 void Chao() 14 { 15 cout << "Xin chao."; 16 } 17 }; 18 //------------------ 19 class NguoiAnh: public Nguoi 20 { 21 public: 22 void Chao() 23 { 24 cout << "Hello."; 25 } 26 }; 27 //------------------ 28 int main() 29 { 30 Nguoi *n; NguoiViet nv; NguoiAnh na; 31 n = &nv; 32 n->Chao(); // (*) 33 n = &na; 34 n->Chao(); // cùng dòng code voi (*) nhưng lại cho kết quả khác 35 return 0; 36 }
Trong C, thì đa hình (động) có thể đạt tới bằng cách dùng từ khóa
switch hay dùng
[con trỏ hàm](/w/index.php?title=Con_tr%E1%BB%8F_h%C3%A0m&action=edit&redlink=1).
C++ còn cung cấp hai tính năng độc đáo cho đa hình là:
- Sự tải bội (overloading): Cho phép một toán tử hay một hàm có những ứng xử khác nhau phụ thuộc vào kiểu của các toán hạng hay các tham số tại thời điểm toán tử hay hàm được triệu gọi.
Ví dụ, ta có thể định nghĩa hai hàm trùng tên như sau: float Demo(float a, float b) {return a + b;} và int Demo(int a, int b) {return a - b;} Ta cũng có thể tải bội phép cộng cho lớp MATRIX để có thể viết được C = A + B khi A, B và C có kiểu MATRIX.
- Tính ảo (virtual): Cho phép một phương thức (hàm thành viên hoặc toán tử) của lớp có ứng xử khác nhau phụ thuộc vào sự kế thừa của lớp con cháu (Xem phương thức Chao() trong ví dụ trên.
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ố](/wiki/Tham_s%E1%BB%91_(khoa_h%E1%BB%8Dc_m%C3%A1y_t%C3%ADnh)). Ví dụ, một chương trình có thể có khai báo 3 hàm sau:
1 void pageUser(int userid); 2 void pageUser(int userid, string message); 3 void pageUser(string username);
Sau, đó, khi trình dịch đọc phải câu lệnh có gọi tới hàm
pageUser(), thì mó sẽ xác định xem đó là hàm nào tùy dựa trên số lượng và kiểu của các đối số đã được đưa vào (tức là dựa vào sự khác nhau của các nguyên mẫu của những hàm này). Lý do ta gọi kiểu quá tải hàm này là đa hình tĩnh vì nó được phân lập trong thời gian dịch 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ử](/w/index.php?title=Qu%C3%A1_t%E1%BA%A3i_to%C3%A1n_t%E1%BB%AD&action=edit&redlink=1) (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
+ - * / = < > += -= *= /= <<
>> <<= >>= ==!= <= >= ++ -- % & ^
! | ~ &= ^= |= && || %= [] () new delete
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.
-
Integer& operator++();
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. Ví dụ như:
1 Integer a = 2; 2 ++a;
sẽ ứng xử tương đương với:
1 Integer a = 2; 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
a lên 3. Tuy nhiên, lập trình viên viết lớp
Integer có thể định nghĩa toán tử
Integer::operator++() làm bất cứ gì lập trình viên muốn. Vì toán tử thường được dùng ngầm, lập trình viên không nên khai báo toán tử trừ trường hợp ý nghĩa của toán tử là rõ ràng và không gây nhầm lẫn. Tuy nhiên, có nhiều ý kiến cho rằng thư viện chuẩn C++ không tuân theo quy ước này. Ví dụ, đối tượng
cout, được sử dụng để xuất ký tự ra
[màn hình](/wiki/Thi%E1%BA%BFt_b%E1%BB%8B_hi%E1%BB%83n_th%E1%BB%8B) có toán tử quá tải <<, nhiều người cho rằng toán tử << là không rõ ràng và vô nghĩa trong trường hợp muốn xuất ký tự ra màn hình do toán tử này cũng là toán tử được dùng trong phép tính [dịch bit](/w/index.php?title=D%E1%BB%8Bch_bit&action=edit&redlink=1). Tuy nhiên, phần lớn lập trình viên cho rằng cách sử dụng toán tử << trong trường hợp
cout là có thể chấp nhận được.
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ở
PrintJob bao gồm hàm thành viên:
-
virtual int getPageCount(double pageWidth, double pageHeight)
Mỗi cách khác nhau của công việc in như là
DoubleSpacedPrintJob, có thể trở thành phương pháp ưu tiên với một hàm mà có thể tính được gần đúng số trang của công việc in theo cách đó. Ngược lại, với việc quá tải hàm, các tham số của một hàm thành phần cho trước thì luôn luôn xác định và không đổi về số lượng và kiểu. Chỉ có kiểu của đối tượng (mà theo đó tên của phương pháp này được gọi) là có thay đổi.
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](/w/index.php?title=%C4%90a_h%C3%ACnh_%C4%91%E1%BB%99ng&action=edit&redlink=1).
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](/w/index.php?title=%C4%90i%E1%BB%81u_ph%E1%BB%91i_%C4%91%E1%BB%99ng&action=edit&redlink=1). Trong C++, việc này thường hoàn tất bằng cách dùng các [bảng ảo](/w/index.php?title=B%E1%BA%A3ng_%E1%BA%A3o&action=edit&redlink=1).
### Tính kế thừa[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=7) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=7)]
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ư](/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C6%B0%E1%BB%9Bng_%C4%91%E1%BB%91i_t%C6%B0%E1%BB%A3ng#C.C3.B4ng_c.E1.BB.99ng_.28public.29). 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
virtual). Kế thừa ảo bảo đảm rằng chỉ có một thực thể của lớp cơ sở tồn tại trong đồ thị kế thừa, tránh được một số vấn đề mơ hồ của việc
[đa kế thừa](/w/index.php?title=%C4%90a_k%E1%BA%BF_th%E1%BB%ABa&action=edit&redlink=1). [Đa kế thừa](/w/index.php?title=%C4%90a_k%E1%BA%BF_th%E1%BB%ABa&action=edit&redlink=1) 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](/wiki/Java_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)), 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
giao diện trong khi giới hạn số lượng của các lớp cơ sở (kế thừa) chỉ còn là một lớp. (
giao diện, không như lớp, không cho phép thiết lập nội dung của các thành viên và do đó không thể có thực thể)
## Thiết kế của C++[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=8) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=8)]
Trong tác phẩm
*The Design and Evolution of C++* [ISBN 0-201-54330-3](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201543303), 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++ được thiết kế để là một ngôn ngữ tổng quát có kiểu tĩnh mà lại hữu hiệu và năng động như C
- C++ được thiết kế nhằm hỗ trợ trực tiếp và đầy đủ nhiều kiểu lập trình như là
[lập trình cấu trúc](/wiki/L%E1%BA%ADp_tr%C3%ACnh_c%E1%BA%A5u_tr%C3%BAc), sự [Trừu tượng của dữ liệu](/w/index.php?title=Tr%E1%BB%ABu_t%C6%B0%E1%BB%A3ng_c%E1%BB%A7a_d%E1%BB%AF_li%E1%BB%87u&action=edit&redlink=1), [lập trình hướng đối tượng](/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C6%B0%E1%BB%9Bng_%C4%91%E1%BB%91i_t%C6%B0%E1%BB%A3ng), và [lập trình tổng quát](/w/index.php?title=L%E1%BA%ADp_tr%C3%ACnh_t%E1%BB%95ng_qu%C3%A1t&action=edit&redlink=1).
- C++ được thiết kế để người lập trình có cơ hội lựa chọn ngay cả khi điều này có thể dẫn tới sự chọn lựa sai lầm của người lập trình.
- C++ được thiết kế để tương thích với C càng nhiều càng tốt, do đó, có cung ứng một sự chuyển đổi (ngôn ngữ) rất thuận tiện từ C.
- C++ tránh các chức năng mà chúng thuộc về dặc điểm riêng của nền tảng hay của mục đích chung chung.
- C++ không lệ thuộc vào các phần bổ sung cho các tính năng thừa
- C++ được thiết kế để hoạt động mà không cần phải có môi trường lập trình hoàn thiện.
Đọc thêm:
*Inside the C++ Object Model*, cuốn sách đào sâu nội dung của C++ của Stanley B. Lippman, ông là người xây đựng và bảo trì *C-front*, một phiên bản thiết lập nguyên thủy của C++ tại Bell Labs. Sách này trình bày làm thế nào trình dịch C++ chuyển các câu lệnh vào sự thiết trí bên trong bộ nhớ.
## Lịch sử C++[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=9) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=9)]
Stroustrup đã bắt đầu làm việc với khái niệm lớp trong
[1979](/wiki/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](/w/index.php?title=Simula&action=edit&redlink=1) 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](/w/index.php?title=BCPL&action=edit&redlink=1) 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](/w/index.php?title=Bell_Labs&action=edit&redlink=1), thì ông gặp phải vấn đề trong việc phân tích [nhân Unix](/w/index.php?title=Nh%C3%A2n_Unix&action=edit&redlink=1) với việc [tính toán phân tán](/wiki/%C4%90i%E1%BB%87n_to%C3%A1n_ph%C3%A2n_t%C3%A1n). 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](/wiki/1985).
Năm
[1983](/wiki/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](/wiki/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](/wiki/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](/wiki/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](/w/index.php?title=Th%C6%B0_vi%E1%BB%87n_Ti%C3%AAu_b%E1%BA%A3n_Chu%E1%BA%A9n&action=edit&redlink=1).
Sau nhiều năm làm việc, có sự cộng tác giữa
[ANSI](/wiki/ANSI) và hội đồng tiêu chuẩn hoá C++ của [ISO](/wiki/ISO) để soạn thảo tiêu chuẩn *. Phiên bản tiêu chuẩn này được phát hành năm ISO/IEC 14882:1998* [1989](/wiki/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 lai[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=10) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=10)]
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](/w/index.php?title=Th%C6%B0_vi%E1%BB%87n_Boost&action=edit&redlink=1), 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++](/w/index.php?title=H%E1%BB%99i_%C4%91%E1%BB%93ng_Ti%C3%AAu_chu%E1%BA%A9n_C%2B%2B&action=edit&redlink=1) 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](/wiki/L%E1%BA%ADp_tr%C3%ACnh_meta) ( *metaprogramming*) của nó. Chuẩn C++ không đề cập về sự thiết lập của [mã hóa tên](/w/index.php?title=M%C3%A3_h%C3%B3a_t%C3%AAn&action=edit&redlink=1) ( *name decoration*), [xử lí ngoại lệ](/w/index.php?title=X%E1%BB%AD_l%C3%AD_ngo%E1%BA%A1i_l%E1%BB%87&action=edit&redlink=1) và sự thiết lập các tính năng đặc biệt khác, tạo [mã đối tượng](/w/index.php?title=M%C3%A3_%C4%91%E1%BB%91i_t%C6%B0%E1%BB%A3ng&action=edit&redlink=1) mà nó được làm ra từ những [trình dịch](/wiki/Tr%C3%ACnh_bi%C3%AAn_d%E1%BB%8Bch) 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 dịch trên các nền tảng đó, Ví dụ [[1]](http://www.codesourcery.com/cxx-abi/).
Các trình dịch cho đến gần đây (
[2004](/wiki/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 dịch đầu tiên thiết kế kiểu này là Comeau C++, đầu năm
[2003](/wiki/2003) (5 năm sau khi tiêu chuẩn đã được phát hành!); trong năm [2004](/wiki/2004), phiên bản beta trình dịch của [Borland C++ Builder X](/w/index.php?title=Borland_C%2B%2B_Builder_X&action=edit&redlink=1) cũng hỗ trợ dùng
export. Cả hai trình dịch đó dựa trên
[mặt ngoài](/wiki/Tr%C3%ACnh_bi%C3%AAn_d%E1%BB%8Bch#FRONT) của [EDG](/w/index.php?title=Edison_Design_Group&action=edit&redlink=1) 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 dề này với việc (khó khăn) đã nêu trên. Những trình dịch khác như là
[Microsoft](/wiki/Microsoft) [Visual C++](/wiki/Visual_C%2B%2B) và [GCC](/wiki/B%E1%BB%99_tr%C3%ACnh_d%E1%BB%8Bch_GNU) thì hoàn toàn không hỗ trợ nó. [Herb Sutter](/w/index.php?title=Herb_Sutter&action=edit&redlink=1), 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++
[[2]](http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1426.pdf). 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](/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t_h%C3%B3a_ti%C3%AAu_b%E1%BA%A3n_t%E1%BB%ABng_ph%E1%BA%A7n&action=edit&redlink=1), 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++"[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=11) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=11)]
Tên C++ được đặt ra bởi
[Rick Mascitti](/w/index.php?title=Rick_Mascitti&action=edit&redlink=1) (giữa [1983](/wiki/1983)) và lần đầu tiên được dùng trong tháng 12 [1983](/wiki/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ử](/wiki/To%C3%A1n_t%E1%BB%AD)
++ đượ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](/wiki/Bjarne_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++.*
## C++ không phải là C mở rộng[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=12) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=12)]
Trong 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
main bên trong một chương trình, trong khi điều này hợp lệ trong C. Thêm vào đó C++ có nhiều giới hạn trong một số tính năng như là nó thiếu sự chuyển kiểu mặc định giữa các kiểu con trỏ không liên hệ nhau và cũng không cho phép một hàm được sử dụng nếu chưa khai báo.
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ụ:
1 struct template { 2 int new; 3 struct template *class; 4 };
hợp lệ trong C nhưng không dùng được trong C++ vì các từ khoá
template,
new và
class.
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++:
1 int subtract(minuend, subtrahend) 2 int minuend; 3 int subtrahend; 4 { 5 return minuend - subtrahend; 6 }
Theo yêu cầu mới trong C++ nên viết thành:
1 int subtract(int minuend, int subtrahend) 2 { 3 return minuend - subtrahend; 4 }
Xem thêm chi tiết trong
[phần quan hệ với C++ của bài ngôn ngữ C](/wiki/C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)#REL).
## Các Ví dụ trong C++[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=13) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=13)]
### Các Ví dụ đơn giản[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=14) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=14)]
Hai chương trình đơn giản sau đây có hiệu lực trong C++ dù không thực thi điều gì có ý nghĩa:
1 int main() 2 { 3 return 0; 4 }
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:
1 int main(int argc, char *argv[]) 2 { 3 return 0; 4 }
Trong đó,
argc là số lượng tham số và
argv là mãng các dãy kí tự chứa các tham số.
**Lưu ý**:
- Chuẩn C++ đòi hỏi hàm
mainphải trả về kiểu
int. Nếu hàm này trả về kiểu khác thì nó không nằm trong tiêu chuẩn.
- Chuẩn C++ cũng không đòi hỏi phải có câu lệnh
returntrong hàm. Khi một hàm không cung cấp giá trị trả về sẽ được trình dịch trả về giá trị mặc định 0. Tuy nhiên, nhiều trình dịch không hỗ trợ việc này mà thay vào đó là báo lỗi.
#### Chào thế giới[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=15) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=15)]
Đây là Ví dụ
[Chào thế giới](/wiki/Hello_world) dùng hàm thư viện chuẩn C++
cout để hiển thị một
[thông báo](/w/index.php?title=Th%C3%B4ng_b%C3%A1o&action=edit&redlink=1) và kết thúc chương trình.
1 #include <iostream> // Required for std::cout 2 3 int main() 4 { 5 std::cout << "Hello World!" << std::endl; 6 }
#### Đọc bàn phím và hiển thị ra màn hình chuẩn[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=16) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=16)]
Ví dụ sau:
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int response; 8 9 std::cout << "Are you feeling well? (1=Yes, 2=No)" << std::flush; 10 std::cin >> response; 11 12 if (response == 1) { 13 std::cout << "I am glad that you are fine.\n"; 14 } 15 else { 16 std::cout << "Oh, I am so sorry.\n"; 17 } 18 }
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
response. Sau đó, khối mã của câu lệnh
if sẽ phân nhánh quyết định hiển thị trả lời.
### Viết theo mẫu hình tiêu bản[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=17) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=17)]
C++ hỗ trợ nhiều
[mẫu hình](/wiki/M%E1%BA%ABu_h%C3%ACnh) 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](/w/index.php?title=L%E1%BA%ADp_tr%C3%ACnh_ti%C3%AAu_b%E1%BA%A3n&action=edit&redlink=1):
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 Tiêu bản Chuẩn](/w/index.php?title=Th%C6%B0_vi%E1%BB%87n_Ti%C3%AAu_b%E1%BA%A3n_Chu%E1%BA%A9n&action=edit&redlink=1). Đó là thùng chứa [ và map](/w/index.php?title=Map_(th%C3%B9ng_ch%E1%BB%A9a_C_c%E1%BB%99ng_c%E1%BB%99ng)&action=edit&redlink=1)
:
[vector]
1 #include <iostream> // std::cout 2 #include <ostream> // operator << 3 #include <vector> // std::vector<> 4 #include <map> // std::map<> and std::pair<> 5 #include <algorithm> // std::for_each() 6 #include <string> // std::string 7 8 using namespace std; // import "std" namespace into global namespace 9 10 void display_item_count(pair< string const, vector<string> > const& person) 11 { 12 // person is a pair of two objects: person.first is person's name, 13 // person.second is a list of person's items (vector of strings) 14 cout << person.first << " is carrying " 15 << person.second.size() << " items" << endl; 16 } 17 18 int main() 19 { 20 // Declare a map with string keys and vectors of strings as data 21 map< string, vector<string> > items; 22 23 // Add some people to the map and let them carry some items 24 items["Anya"].push_back("scarf"); 25 items["Dimitri"].push_back("tickets"); 26 items["Anya"].push_back("puppy"); 27 28 // Iterate over all the items in the container 29 for_each(items.begin(), items.end(), display_item_count); 30 return 0; 31 }
### Viết theo mẫu hình hướng đối tượng[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=18) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=18)] **Lưu ý**:
- Các dòng màu đen là mã nguồn, các dòng màu khác là các dòng giải thích ý nghĩa sử dụng của OOP.
- Bản thân các lớp khi khai báo vẫn có tính trừu tượng. Nghĩa là, nó không sử dụng trực tiếp được (mà chỉ có thể xem là các kiểu dữ liệu). Chỉ khi nào người dùng thực hiện động tác thực thể hóa (
*instantiate*) thì lớp này mới khởi động và tạo thành một đối tượng thực. Trong Ví dụ này thì câu lệnh
Inherit1 boy;và câu lệnh
Inherit2 girl;là hai câu lệnh để thực thể hóa thành hai đối tượng
boyvà
girl.
- Sự hỗ trợ các loại đặc tính cho OOP trong C++ rất phong phú. Ví dụ chỉ nhằm minh họa các tính chất cơ bản của OOP.
## Xem thêm[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=19) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=19)]
|
|![]()
|
|[Aspect-oriented development](//en.wikipedia.org/wiki/Aspect-oriented_programming) [C++ Managed Extensions](//en.wikipedia.org/wiki/C_Plus_Plus_Managed_Extensions) [C++/CLI](//en.wikipedia.org/wiki/C_Plus_Plus_CLI) [C++ struct](//en.wikipedia.org/wiki/C_plus_plus_struct) [C#](/wiki/C_th%C4%83ng) [en:Circular dependency](//en.wikipedia.org/wiki/Circular_dependency), how C++ handles circular dependencies [en:C string](//en.wikipedia.org/wiki/C_string) [Comparison of Java to C++](//en.wikipedia.org/wiki/Comparison_of_Java_to_C_Plus_Plus) [Mẫu thiết kế](/wiki/M%E1%BA%ABu_thi%E1%BA%BFt_k%E1%BA%BF_(khoa_h%E1%BB%8Dc_m%C3%A1y_t%C3%ADnh)) [Dev-C++](/wiki/Dev-C%2B%2B) [Bộ trình dịch GNU](/wiki/B%E1%BB%99_tr%C3%ACnh_d%E1%BB%8Bch_GNU) [Hàm nội tuyến](/wiki/H%C3%A0m_n%E1%BB%99i_tuy%E1%BA%BFn) [Lập trình meta](/wiki/L%E1%BA%ADp_tr%C3%ACnh_meta) [en:Name mangling](//en.wikipedia.org/wiki/Name_mangling) [Danh sách từ nguyên thuật ngữ máy tính](/wiki/Danh_s%C3%A1ch_t%E1%BB%AB_nguy%C3%AAn_thu%E1%BA%ADt_ng%E1%BB%AF_m%C3%A1y_t%C3%ADnh) [Lập trình hướng đối tượng](/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C6%B0%E1%BB%9Bng_%C4%91%E1%BB%91i_t%C6%B0%E1%BB%A3ng) [en:Objective-C](//en.wikipedia.org/wiki/Objective-C) [OpenC++](//en.wikipedia.org/wiki/OpenCxx) [Operators in C and C++](//en.wikipedia.org/wiki/Operators_in_C_and_C_Plus_Plus) [Visual C++](/wiki/Visual_C%2B%2B) [en:Barton-Nackman](//en.wikipedia.org/wiki/Barton-Nackman)
## Tham khảo[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=20) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=20)] [^](#cite_ref-1) [“ISO/IEC 14882:2014-Information technology -- Programming languages -- C++”](http://www.iso.org/iso/catalogue_detail.htm?csnumber=64029). ISO. Truy cập ngày 5 tháng 2 năm 2016. [Đặng Ngọc Hoàng Thành](/w/index.php?title=%C4%90%E1%BA%B7ng_Ng%E1%BB%8Dc_Ho%C3%A0ng_Th%C3%A0nh&action=edit&redlink=1): *Lập trình hướng đối tượng với C++*, 2011 [British Standards Institute](/w/index.php?title=British_Standards_Institute&action=edit&redlink=1): *The C++ Standard*, John Wiley and Sons Ltd, [ISBN 0-470-84674-7](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0470846747) [Bjarne Stroustrup](/wiki/Bjarne_Stroustrup): *The C++ Programming Language*, Addison-Wesley, [ISBN 0-201-70073-5](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201700735)
- Bjarne Stroustrup:
*The Design and Evolution of C++*, Addison-Wesley, [ISBN 0-201-54330-3](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201543303) [Nicolai M. Josuttis](/w/index.php?title=Nicolai_M._Josuttis&action=edit&redlink=1): *The C++ Standard Library*, Addison-Wesley, [ISBN 0-201-37926-0](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201379260) [David Vandevoorde](/w/index.php?title=David_Vandevoorde&action=edit&redlink=1), [Nicolai M. Josuttis](/w/index.php?title=Nicolai_M._Josuttis&action=edit&redlink=1): *C++ Templates: The complete Guide*, Addison-Wesley, [ISBN 0-201-70073-5](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201700735) [Scott Meyers](/w/index.php?title=Scott_Meyers&action=edit&redlink=1): *Effective C++ - 50 Specific Ways to Improve Your Programs and Designs*, Addison-Wesley, [ISBN 0-201-92488-9](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201924889)
- Scott Meyers:
*More Effective C++ - 35 New Ways to Improve Your Programs and Designs*, Addison-Wesley, [ISBN 0-201-63371-X](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/020163371X) [Scott Meyers](/w/index.php?title=Scott_Meyers&action=edit&redlink=1): *Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library*, Addison-Wesley, [ISBN 0-201-74962-9](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201749629) [Andrei Alexandrescu](/wiki/Andrei_Alexandrescu): *Modern C++ Design - Generic Programming and Design Patterns Applied*, Addison-Wesley, [ISBN 0-201-70431-5](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201704315) [Herb Sutter](/w/index.php?title=Herb_Sutter&action=edit&redlink=1), [Andrei Alexandrescu](/wiki/Andrei_Alexandrescu): *C++ Coding Standards - 101 Rules, Guidelines, and Best Practices*, Addison-Wesley, [ISBN 0-321-11358-6](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0321113586) [David Abrahams](/w/index.php?title=David_Abrahams&action=edit&redlink=1), [Aleksey Gurtovoy](/w/index.php?title=Aleksey_Gurtovoy&action=edit&redlink=1): *C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond*, Addison-Wesley, [ISBN 0-321-22725-5](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0321227255)
- Herb Sutter:
*Exceptional C++ Style*, Addison-Wesley, [ISBN 0-201-76042-8](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201760428) [Andrew Koenig](/w/index.php?title=Andrew_Koenig&action=edit&redlink=1), [Barbara E. Moo](/w/index.php?title=Barbara_E._Moo&action=edit&redlink=1): *Ruminations on C++*, Addison-Wesley, [ISBN 0-201-42339-1](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201423391)
- Andrew Koenig,
[Barbara E. Moo](/w/index.php?title=Barbara_E._Moo&action=edit&redlink=1): *Accelerated C++ - Practical Programming by Example*, Addison-Wesley, [ISBN 0-201-70353-X](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/020170353X) [Matthew Wilson](/w/index.php?title=Matthew_Wilson&action=edit&redlink=1): *Imperfect C++: Practical Solutions for Real-Life Programming*, Addison-Wesley, [ISBN 0-321-22877-4](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0321228774) [James O. Coplien](/w/index.php?title=James_O._Coplien&action=edit&redlink=1): *Advanced C++*, [ISBN 0-201-54855-0](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201548550)
- James O. Coplien:
*Multiparadigm Design for C++*, Addison-Wesley, [ISBN 0-201-82467-1](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201824671) [John Lakos](/w/index.php?title=John_Lakos&action=edit&redlink=1): *Large-Scale C++ Software Design*, Addison-Wesley, [ISBN 0-201-63362-0](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201633620) [Stephen C. Dewhurst](/w/index.php?title=Stephen_C._Dewhurst&action=edit&redlink=1): *C++ Gotchas: Avoiding Common Problems in Coding and Design*, Addison-Wesley, [ISBN 0-321-12518-5](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0321125185) [D. S. Malik](/w/index.php?title=D._S._Malik&action=edit&redlink=1): *C++ Programming - From Problem Analysis to Program Design*, Course Technology, [ISBN 0-619-06213-4](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0619062134) [Ivor Horton](/w/index.php?title=Ivor_Horton&action=edit&redlink=1): *Beginning ANSI C++: The Complete Language*, Apress, [ISBN 1-59059-227-1](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/1590592271) [Siva Challa](/w/index.php?title=Siva_Challa&action=edit&redlink=1), [Artur Laksberg](/w/index.php?title=Artur_Laksberg&action=edit&redlink=1): *Essential Guide to Managed Extensions for C++*, Apress, [ISBN 1-893115-28-3](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/1893115283) [John Viega](/w/index.php?title=John_Viega&action=edit&redlink=1), [Matt Messier](/w/index.php?title=Matt_Messier&action=edit&redlink=1): *Secure Programming Cookbook for C and C++*, O'Reilly & Associates, [ISBN 0-596-00394-3](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0596003943) [Steve Oualline](/w/index.php?title=Steve_Oualline&action=edit&redlink=1): *How Not to Program in C++*, No Starch Press, [ISBN 1-886411-95-6](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/1886411956)
- Steve Oualline:
*Practical C++ Programming*, O'Reilly & Associates, [ISBN 0-596-00419-2](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0596004192) [Michi Henning](/w/index.php?title=Michi_Henning&action=edit&redlink=1), [Steve Vinoski](/w/index.php?title=Steve_Vinoski&action=edit&redlink=1): *Advanced CORBA Programming with C++*, Addison-Wesley, [ISBN 0-201-37927-9](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201379279) [Cameron Hughes](/w/index.php?title=Cameron_Hughes&action=edit&redlink=1), [Tracy Hughes](/w/index.php?title=Tracy_Hughes&action=edit&redlink=1): *Parallel and Distributed Programming Using C++*, Prentice Hall, [ISBN 0-13-101376-9](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0131013769) [Adam Drozdek](/w/index.php?title=Adam_Drozdek&action=edit&redlink=1): *Data Structures in C++*, Course Technology, [ISBN 0-534-37597-9](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0534375979) [Larry R. Nyhoff](/w/index.php?title=Larry_R._Nyhoff&action=edit&redlink=1): *ADTs, Data Structures and Problem Solving with C++*, Addison-Wesley, [ISBN 0-13-132794-1](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0131327941) [Paul Deitel](/w/index.php?title=Paul_Deitel&action=edit&redlink=1), [Harvey Deitel](/w/index.php?title=Harvey_Deitel&action=edit&redlink=1), [D. R. Choffnes](/w/index.php?title=D._R._Choffnes&action=edit&redlink=1), [C. L. Kelsey](/w/index.php?title=C._L._Kelsey&action=edit&redlink=1): *Simply C++ - An Applicaton-Driven Tutorial Approach*, Prentice Hall, [ISBN 0-13-127768-5](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0131277685) [Paul Whitehead](/w/index.php?title=Paul_Whitehead&action=edit&redlink=1): *Learning C++ - Programming C++ with Objects and Templates*, O'Reilly & Associates, [ISBN 0-596-00437-0](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0596004370) [Stanley B. Lippman](/w/index.php?title=Stanley_B._Lippman&action=edit&redlink=1): *Essential C++*, Addison Wesley, [ISBN 0-201-48518-4](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201485184)
## Liên kết ngoài[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=21) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=21)] [Bjarne Stroustrup's homepage](http://www.research.att.com/~bs/homepage.html) [C++ FAQ Lite by Marshall Cline](http://www.parashift.com/c%2B%2B-faq-lite/) [Bjarne Stroustrup's C++ Style and Technique FAQ](http://www.research.att.com/~bs/bs_faq2.html)
### Hướng dẫn[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=22) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=22)] [Dinkumware's C++ Library Reference Manual](http://www.dinkumware.com/refxcpp.html) [SGI's Standard Template Library Programmer's Guide](http://www.sgi.com/tech/stl/) [C/C++ Reference](http://cppreference.com/) [Hyperlinked C++ BNF Grammar](http://www.nongnu.org/hcb/)
### Trình dịch[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=23) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=23)] [Borland's freely available compiler](http://community.borland.com/cgi-bin/surveys/web_download_survey.cgi?sid=33) [Digital Mars C++](http://www.digitalmars.com/download/freecompiler.html) [GNU Compiler Collection, including the g++ compiler](http://gcc.gnu.org/) [Microsoft's freely available.NET C++ compiler](http://msdn.microsoft.com/netframework/downloads/updates/default.aspx)
### Sách[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=24) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=24)] [Giáo trình lập trình hướng đối tượng C++](http://dangngochoangthanh.blogspot.com/2010/09/giao-trinh-lap-trinh-huong-oi-tuong-voi_02.html)bởi Ths Hoàng Thành. [Programming:C plus plus(1) Wikibook](http://en.wikibooks.org/wiki/Programming:_C_-/-_-/-) [Programming:C plus plus(2) Wikibook](http://wikibooks.org/wiki/Programming:C_plus_plus) [How to Think Like a Computer Scientist](http://ibiblio.org/obp/thinkCS/)C++ version [Free book "Thinking in C++"](http://mindview.net/Books/TICPP/ThinkingInCPP2e.html)by [Bruce Eckel](/w/index.php?title=Bruce_Eckel&action=edit&redlink=1) [Free book "C++: A Dialog"](http://www.steveheller.com/cppad/Output/dialogTOC.html)by [Steve Heller](/w/index.php?title=Steve_Heller&action=edit&redlink=1) [Computer-Books.us](http://www.computer-books.us/cpp.php)Collection of online C++ books.
### Trợ huấn[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=25) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=25)] [C++ Programming Tutorials - CoderSource.net](http://www.codersource.net/codersource_cppprogramming.html) [Free C++ Tutorials](http://www.allfreetutorials.com/cplusplustutorials.htm) [Free, comprehensive C++ Tutorials from About.com](http://cplus.about.com/od/beginnerctutorial/l/blcplustut.htm) [GNAcademy.Org TWiki C++ Web](http://www.gnacademy.org/twiki/bin/view/CPP/WebHome) [The C++ Annotations](http://www.icce.rug.nl/documents/cplusplus/) [C++ tutorial for C users](http://www.4p8.com/eric.brasseur/cppcen.html)
### Thông tin về các chuẩn[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=26) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=26)] [Standards Committee Page: JTC1/SC22/WG21 - C++](http://www.open-std.org/jtc1/sc22/wg21/)
- Somewhat dated
[draft of the C++ standard](ftp://ftp.research.att.com/pub/c++std/WP/CD2/) [Testing C++ Compilers for ISO Language Conformance](http://www.cs.clemson.edu/~malloy/projects/ddj2/ddj2.html)
### Các thư viện và tài liệu liên đới[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=27) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=27)] [Boost.org: C++ high quality libraries](http://www.boost.org/) [Common Text Transformation Library](http://cttl.sourceforge.net/index.html) [Planet Source Code](http://www.pscode.com)with several thousand code samples [Hierarchical (Mumps) data base facility](http://www.cs.uni.edu/~okane/source/mdh.html)
### Các trang web liên quan[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=28) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=28)]
### Diễn đàn[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=29) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=29)] [C++ learning community](http://forum.cpplc.net), C++ forums based at learning the C++ language [C++ Forum](http://cboard.cprogramming.com/forumdisplay.php?f=3)at Cprogramming.com [C and C++](http://www.daniweb.com/techtalkforums/forum8.html)at Daniweb [C++ Home Forum](http://www.cpp-home.com/forum/)at cpp-home.com
### Tạp chí[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=30) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=30)]
### Cộng đồng[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=31) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=31)]
### Khác[
[sửa](/w/index.php?title=C%2B%2B&veaction=edit&vesection=32) | [sửa mã nguồn](/w/index.php?title=C%2B%2B&action=edit§ion=32)] [C2.com Discussion](http://www.c2.com/cgi/wiki?CeePlusPlus) [Parsing C++](http://www.nobugs.org/developer/parsingcpp/) [Embedded C++ Homepage](http://www.caravan.net/ec2plus/) [From Borland C++ to ISO/ANSI C++](http://web.archive.org/web/20080508234412/http://www.geocities.com/gengiskanhg.geo/GFDL/Borland_CPP_to_ISO_CPP_translation_guide.html)A guide to translate C++ code for developers. [Ch](http://softintegration.com/products/chstandard/)- free [interpreter](/w/index.php?title=Interpreter&action=edit&redlink=1)of C++ subset [C++/CLI](http://msdn.microsoft.com/msdnmag/issues/05/02/PureC/default.aspx)by [Stanley B. Lippman](/w/index.php?title=Stanley_B._Lippman&action=edit&redlink=1) [freenode](/wiki/Freenode)'s [##C++](http://jcatki.no-ip.org/fncpp/)channel wiki
- Article "
[Incompatibilities Between ISO C and ISO C++](http://david.tribble.com/text/cdiffs.htm)" by [David R. Tribble](/w/index.php?title=David_R._Tribble&action=edit&redlink=1)
- Newsgroups "
[comp.lang.c++](news://comp.lang.c++)" " [comp.lang.c++.moderated](news://comp.lang.c++.moderated)" " [comp.std.c++](news://comp.std.c++)" [Internet sites and files of interest to C++ users](http://www.robertnz.net/cpp_site.html), A categorised list of C++ related links. [University of Cambridge Department of Engineering list of C++ links](http://www-h.eng.cam.ac.uk/help/tpl/languages/C++.html)
|
|
|
|![]()
|Wikimedia Commons có thêm thư viện hình ảnh và phương tiện truyền tải về
|

X-Cache: cp1067 hit/3, cp1054 miss


markdown:
# Nolanville, Texas
Bách khoa toàn thư mở Wikipedia
|Nolanville, Texas|
|—
|[Vị trí trong Quận Bell, Texas](/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t:T%E1%BA%A3i_l%C3%AAn&wpDestFile=Bell_County_Nolanville.svg)
Vị trí trong
[Quận Bell](/wiki/Qu%E1%BA%ADn_Bell,_Texas), [Texas](/wiki/Texas) ![ Vị trí quận Bell trong tiểu bang Texas ở Hoa Kỷ](//upload.wikimedia.org/wikipedia/commons/thumb/c/cc/Map_of_USA_TX.svg/250px-Map_of_USA_TX.svg.png)
![ Vị trí quận Bell trong tiểu bang Texas ở Hoa Kỷ](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cc/Map_of_USA_TX.svg/250px-Map_of_USA_TX.svg.png)
Vị trí quận Bell trong tiểu bang Texas ở Hoa Kỷ
[Quốc gia](/wiki/Qu%E1%BB%91c_gia) [Hoa Kỳ](/wiki/Hoa_K%E1%BB%B3) [Tiểu bang](/wiki/Ti%E1%BB%83u_bang_Hoa_K%E1%BB%B3) [Texas](/wiki/Texas) [Quận](/w/index.php?title=Danh_s%C3%A1ch_c%C3%A1c_qu%E1%BA%ADn_%E1%BB%9F_Texas&action=edit&redlink=1) [Quận Bell](/wiki/Qu%E1%BA%ADn_Bell,_Texas) [Múi giờ](/wiki/M%C3%BAi_gi%E1%BB%9D) [CST](/wiki/M%C3%BAi_gi%E1%BB%9D_mi%E1%BB%81n_Trung_(B%E1%BA%AFc_M%E1%BB%B9))( [UTC-6](/wiki/UTC-6)) [DST](/wiki/Quy_%C6%B0%E1%BB%9Bc_gi%E1%BB%9D_m%C3%B9a_h%C3%A8)) **CDT**( [UTC-5](/wiki/UTC-5)) **Nolanville** là một [thành phố](/wiki/Th%C3%A0nh_ph%E1%BB%91_t%E1%BA%A1i_Hoa_K%E1%BB%B3) thuộc [quận Bell](/wiki/Qu%E1%BA%ADn_Bell,_Texas), tiểu bang [Texas](/wiki/Texas), [Hoa Kỳ](/wiki/Hoa_K%E1%BB%B3). Năm 2010, dân số của xã này là 4259 người. [[1]](#cite_note-1)
## Dân số[
[sửa](/w/index.php?title=Nolanville,_Texas&veaction=edit&vesection=1) | [sửa mã nguồn](/w/index.php?title=Nolanville,_Texas&action=edit§ion=1)]
- Dân số năm 2000: 2150 người.
- Dân số năm 2010: 4259 người.
## Tham khảo[
[sửa](/w/index.php?title=Nolanville,_Texas&veaction=edit&vesection=2) | [sửa mã nguồn](/w/index.php?title=Nolanville,_Texas&action=edit§ion=2)] [^](#cite_ref-1) [“2010 Census Gazetteer Files”](http://www.census.gov/geo/www/gazetteer/gazetteer2010.html). [Cục Thống kê Dân số Hoa Kỳ](/wiki/C%E1%BB%A5c_Th%E1%BB%91ng_k%C3%AA_D%C3%A2n_s%E1%BB%91_Hoa_K%E1%BB%B3). Truy cập ngày 15 tháng 10 năm 2012.

WARC-Type: response

Content-Type: application/http; msgtype=response

Set-Cookie: GeoIP=US:VA:Ashburn:39.04:-77.49:v4; Path=/; secure; Domain=.wikipedia.org

Connection: close

X-Content-Type-Options: nosniff

Cache-Control: private, s-maxage=0, max-age=0, must-revalidate

P3P: CP="This is not a P3P policy! See https://vi.wikipedia.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:CentralAutoLogin/P3P for more info."

Via: 1.1 varnish, 1.1 varnish

Content-Language: vi

X-UA-Compatible: IE=Edge

X-Cache: cp1067 miss, cp1054 miss

Vary: Accept-Encoding,Cookie,Authorization

Accept-Ranges: bytes

Content-Type: text/html; charset=UTF-8


markdown:
# Plaine
Bách khoa toàn thư mở Wikipedia
[Tọa độ](/wiki/H%E1%BB%87_t%E1%BB%8Da_%C4%91%E1%BB%99_%C4%91%E1%BB%8Ba_l%C3%BD): [48°25′09″B 7°08′47″Đ / 48,419166°B 7,146388°Đ](//tools.wmflabs.org/geohack/geohack.php?language=vi&pagename=Plaine¶ms=48.419166_N_7.146388_E_region:FR-67_type:city(958))
|
|
|
|![]()
[Quốc gia](/wiki/Danh_s%C3%A1ch_qu%E1%BB%91c_gia) ![ Quốc kỳ Pháp](//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/18px-Flag_of_France.svg.png)
![ Quốc kỳ Pháp](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/18px-Flag_of_France.svg.png)
[Pháp](/wiki/Ph%C3%A1p) [Vùng](/wiki/V%C3%B9ng_c%E1%BB%A7a_Ph%C3%A1p) [Alsace](/wiki/Alsace) [Tỉnh](/wiki/T%E1%BB%89nh_c%E1%BB%A7a_Ph%C3%A1p) [Bas-Rhin](/wiki/Bas-Rhin) [Quận](/wiki/Qu%E1%BA%ADn_c%E1%BB%A7a_Ph%C3%A1p) [Molsheim](/wiki/Molsheim_(qu%E1%BA%ADn)) [Tổng](/wiki/T%E1%BB%95ng_c%E1%BB%A7a_Ph%C3%A1p) [Xã (thị) trưởng](/wiki/Th%E1%BB%8B_tr%C6%B0%E1%BB%9Fng)
(2001–2008)
[Độ cao](/wiki/Cao_%C4%91%E1%BB%99) 1 2(8,82 sq mi) [Nhân khẩu](/wiki/Nh%C3%A2n_kh%E1%BA%A9u_Ph%C3%A1p) 2 [Mật độ](/wiki/M%E1%BA%ADt_%C4%91%E1%BB%99_d%C3%A2n_s%E1%BB%91) 2(110 /sq mi) [INSEE](/wiki/M%C3%A3_INSEE)/Mã bưu chính [67377](http://recensement.insee.fr/searchResults.action?zoneSearchField=&codeZone=67377-COM)/ [67420](/wiki/Danh_s%C3%A1ch_c%C3%A1c_m%C3%A3_b%C6%B0u_ch%C3%ADnh_%E1%BB%9F_Ph%C3%A1p) 1Dữ liệu địa chính Pháp loại trừ các hồ và ao lớn hơn 1 km² (0.386 dặm vuông hoặc 247 [acre](/wiki/Acre)) cũng như các cửa sông. 2 *Dân số không tính hai lần*: cư dân của nhiều xã (ví dụ, các sinh viên và quân nhân) chỉ tính một lần. **Plaine** là một [xã](/wiki/X%C3%A3_c%E1%BB%A7a_Ph%C3%A1p) thuộc [tỉnh](/wiki/T%E1%BB%89nh_(Ph%C3%A1p)) [Bas-Rhin](/wiki/Bas-Rhin) trong [vùng](/wiki/V%C3%B9ng_c%E1%BB%A7a_Ph%C3%A1p) [Alsace](/wiki/Alsace) đông bắc [Pháp](/wiki/Ph%C3%A1p).
## Xem thêm[
[sửa](/w/index.php?title=Plaine&veaction=edit&vesection=1) | [sửa mã nguồn](/w/index.php?title=Plaine&action=edit§ion=1)]
## Tham khảo[
[sửa](/w/index.php?title=Plaine&veaction=edit&vesection=2) | [sửa mã nguồn](/w/index.php?title=Plaine&action=edit§ion=2)]
|
|![]()
|Wikimedia Commons có thêm hình ảnh và phương tiện truyền tải về
|

X-Cache: cp1054 miss, cp1054 miss


markdown:
# Quận Clearwater, Idaho
**Quận Clearwater** là một [quận](/wiki/Qu%E1%BA%ADn_c%E1%BB%A7a_Hoa_K%E1%BB%B3) thuộc [tiểu bang](/wiki/Ti%E1%BB%83u_bang_Hoa_K%E1%BB%B3) [Idaho](/wiki/Idaho), [Hoa Kỳ](/wiki/Hoa_K%E1%BB%B3). Quận này được đặt tên theo. Theo điều tra dân số của [Cục điều tra dân số Hoa Kỳ](/wiki/C%E1%BB%A5c_Th%E1%BB%91ng_k%C3%AA_D%C3%A2n_s%E1%BB%91_Hoa_K%E1%BB%B3) năm 2000, quận có dân số người. Quận lỵ đóng ở.
## Địa lý[
[sửa](/w/index.php?title=Qu%E1%BA%ADn_Clearwater,_Idaho&veaction=edit&vesection=1) | [sửa mã nguồn](/w/index.php?title=Qu%E1%BA%ADn_Clearwater,_Idaho&action=edit§ion=1)]
Theo
[Cục điều tra dân số Hoa Kỳ](/wiki/C%E1%BB%A5c_Th%E1%BB%91ng_k%C3%AA_D%C3%A2n_s%E1%BB%91_Hoa_K%E1%BB%B3), quận có diện tích km2, trong đó có km2 là diện tích mặt nước.
### Các xa lộ chính[
[sửa](/w/index.php?title=Qu%E1%BA%ADn_Clearwater,_Idaho&veaction=edit&vesection=2) | [sửa mã nguồn](/w/index.php?title=Qu%E1%BA%ADn_Clearwater,_Idaho&action=edit§ion=2)]
### Quận giáp ranh[
[sửa](/w/index.php?title=Qu%E1%BA%ADn_Clearwater,_Idaho&veaction=edit&vesection=3) | [sửa mã nguồn](/w/index.php?title=Qu%E1%BA%ADn_Clearwater,_Idaho&action=edit§ion=3)]
## Thông tin nhân khẩu[
[sửa](/w/index.php?title=Qu%E1%BA%ADn_Clearwater,_Idaho&veaction=edit&vesection=4) | [sửa mã nguồn](/w/index.php?title=Qu%E1%BA%ADn_Clearwater,_Idaho&action=edit§ion=4)]
## Tham khảo[
[sửa](/w/index.php?title=Qu%E1%BA%ADn_Clearwater,_Idaho&veaction=edit&vesection=5) | [sửa mã nguồn](/w/index.php?title=Qu%E1%BA%ADn_Clearwater,_Idaho&action=edit§ion=5)]
|
|
lớn
|
|
|
|
nhỏ
[Ammon](/wiki/Ammon,_Idaho) | [Blackfoot](/wiki/Blackfoot,_Idaho) | [Burley](/wiki/Burley,_Idaho) | [Caldwell](/wiki/Caldwell,_Idaho) | [Chubbuck](/wiki/Chubbuck,_Idaho) | [Eagle](/wiki/Eagle,_Idaho) | [Thành phố Garden](/wiki/Th%C3%A0nh_ph%E1%BB%91_Garden,_Idaho) | [Kuna](/wiki/Kuna,_Idaho) | [Moscow](/wiki/Moscow,_Idaho) | [Mountain Home](/wiki/Mountain_Home,_Idaho) | [McCall](/wiki/McCall,_Idaho) | [Post Falls](/wiki/Post_Falls,_Idaho) | [Rexburg](/wiki/Rexburg,_Idaho) | [Stanley](/wiki/Stanley,_Idaho) [Quận](/wiki/Qu%E1%BA%ADn_c%E1%BB%A7a_Hoa_K%E1%BB%B3) [Ada](/wiki/Qu%E1%BA%ADn_Ada,_Idaho) | [Adams](/wiki/Qu%E1%BA%ADn_Adams,_Idaho) | [Bannock](/wiki/Qu%E1%BA%ADn_Bannock,_Idaho) | [Bear Lake](/wiki/Qu%E1%BA%ADn_Bear_Lake,_Idaho) | [Benewah](/wiki/Qu%E1%BA%ADn_Benewah,_Idaho) | [Bingham](/wiki/Qu%E1%BA%ADn_Bingham,_Idaho) | [Blaine](/wiki/Qu%E1%BA%ADn_Blaine,_Idaho) | [Boise](/wiki/Qu%E1%BA%ADn_Boise,_Idaho) | [Bonner](/wiki/Qu%E1%BA%ADn_Bonner,_Idaho) | [Bonneville](/wiki/Qu%E1%BA%ADn_Bonneville,_Idaho) | [Boundary](/wiki/Qu%E1%BA%ADn_Boundary,_Idaho) | [Butte](/wiki/Qu%E1%BA%ADn_Butte,_Idaho) | [Camas](/wiki/Qu%E1%BA%ADn_Camas,_Idaho) | [Canyon](/wiki/Qu%E1%BA%ADn_Canyon,_Idaho) | [Caribou](/wiki/Qu%E1%BA%ADn_Caribou,_Idaho) | [Cassia](/wiki/Qu%E1%BA%ADn_Cassia,_Idaho) | [Clark](/wiki/Qu%E1%BA%ADn_Clark,_Idaho) | **Clearwater** | [Custer](/wiki/Qu%E1%BA%ADn_Custer,_Idaho) | [Elmore](/wiki/Qu%E1%BA%ADn_Elmore,_Idaho) | [Franklin](/wiki/Qu%E1%BA%ADn_Franklin,_Idaho) | [Fremont](/wiki/Qu%E1%BA%ADn_Fremont,_Idaho) | [Gem](/wiki/Qu%E1%BA%ADn_Gem,_Idaho) | [Gooding](/wiki/Qu%E1%BA%ADn_Gooding,_Idaho) | [Idaho](/wiki/Qu%E1%BA%ADn_Idaho,_Idaho) | [Jefferson](/wiki/Qu%E1%BA%ADn_Jefferson,_Idaho) | [Jerome](/wiki/Qu%E1%BA%ADn_Jerome,_Idaho) | [Kootenai](/wiki/Qu%E1%BA%ADn_Kootenai,_Idaho) | [Latah](/wiki/Qu%E1%BA%ADn_Latah,_Idaho) | [Lemhi](/wiki/Qu%E1%BA%ADn_Lemhi,_Idaho) | [Lewis](/wiki/Qu%E1%BA%ADn_Lewis,_Idaho) | [Lincoln](/wiki/Qu%E1%BA%ADn_Lincoln,_Idaho) | [Madison](/wiki/Qu%E1%BA%ADn_Madison,_Idaho) | [Minidoka](/wiki/Qu%E1%BA%ADn_Minidoka,_Idaho) | [Nez Perce](/wiki/Qu%E1%BA%ADn_Nez_Perce,_Idaho) | [Oneida](/wiki/Qu%E1%BA%ADn_Oneida,_Idaho) | [Owyhee](/wiki/Qu%E1%BA%ADn_Owyhee,_Idaho) | [Payette](/wiki/Qu%E1%BA%ADn_Payette,_Idaho) | [Power](/wiki/Qu%E1%BA%ADn_Power,_Idaho) | [Shoshone](/wiki/Qu%E1%BA%ADn_Shoshone,_Idaho) | [Teton](/wiki/Qu%E1%BA%ADn_Teton,_Idaho) | [Twin Falls](/wiki/Qu%E1%BA%ADn_Twin_Falls,_Idaho) | [Valley](/wiki/Qu%E1%BA%ADn_Valley,_Idaho) | [Washington](/wiki/Qu%E1%BA%ADn_Washington,_Idaho)

X-Cache: cp1055 miss, cp1054 miss


markdown:
# misnomer
Từ điển mở Wiktionary
## Tiếng Anh[
[sửa](/w/index.php?title=B%E1%BA%A3n_m%E1%BA%ABu:-eng-&action=edit§ion=T-1)]
### Cách phát âm[
[sửa](/w/index.php?title=B%E1%BA%A3n_m%E1%BA%ABu:-pron-&action=edit§ion=T-1)]
|Hoa Kỳ||
|
### Danh từ[
[sửa](/w/index.php?title=B%E1%BA%A3n_m%E1%BA%ABu:-noun-&action=edit§ion=T-1)] **misnomer** [/ˌmɪs.ˈnoʊ.mɜː/](/wiki/Wiktionary:IPA)
### Tham khảo[
[sửa](/w/index.php?title=B%E1%BA%A3n_m%E1%BA%ABu:-ref-&action=edit§ion=T-1)]
- Hồ Ngọc Đức,
[Dự án Từ điển tiếng Việt miễn phí](http://www.informatik.uni-leipzig.de/~duc/Dict/)( [chi tiết](/wiki/Wiktionary:Ngu%E1%BB%93n_g%E1%BB%91c/FVDP))
|Hoa Kỳ||
|**misnomer** [/ˌmɪs.ˈnoʊ.mɜː/](/wiki/Wiktionary:IPA)

Set-Cookie: GeoIP=US:VA:Ashburn:39.04:-77.49:v4; Path=/; secure; Domain=.wiktionary.org

P3P: CP="This is not a P3P policy! See https://vi.wiktionary.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:CentralAutoLogin/P3P for more info."

X-Cache: cp1066 miss, cp1066 miss


markdown:
Trang chủ
›
Điện thoại di động
›
Mobiistar
Điện thoại Mobistar T900
Điện thoại
Tablet
Laptop
Phụ kiện
Đã sử dụng
Sim, thẻ
Công Nghệ
Hỏi đáp
Game, App
Khuyến mãi
Đang xử lý, vui lòng đợi trong giây lát...

Cache-Control: private

Content-Type: text/html; charset=utf-8

Set-Cookie: SvID=w14|V5bLg|V5bLg; path=/

Access-Control-Allow-Methods: GET, POST, OPTIONS


markdown:
¿Hay comida disponible en esta atracción?
¿Se puede llegar a esta atracción mediante transporte público?
¿Esta atracción cuenta con acceso para personas en sillas de ruedas?
¿Te parece que esta atracción es apta para niños pequeños?
¿Te parece que esta atracción es apta para familias?
¿Recomendarías esta atracción para amantes de la historia?
¿Recomendarías esta atracción para pioneros?
¿Recomendarías esta atracción para amantes del arte y la arquitectura?
¿Recomendarías esta atracción para aventureros?
¿Esta atracción es popular para los lugareños?
¡Gracias por tu ayuda!
Más información
¿Es el propietario o gerente de este establecimiento? Solicite su perfil gratis para responder las opiniones, actualizar su perfil y mucho más.

Content-Language: es-MX

Set-Cookie: TAUnique=%1%enc%3AyofKqfE%2BzOIu3LOXAa32BQiA7VwasjEf58yHAACGmcZirck%2BOLs3gg%3D%3D; Domain=.tripadvisor.com.mx; Path=/; Expires=Thu, 26 Jul 2018 03:03:52 GMT; HttpOnly

Server: Apache

Pragma: no-cache

Cache-Control: no-cache,no-store,must-revalidate

Vary: User-Agent,Accept-Encoding

P3P: CP="NOI CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT DSP COR CAO PSA IDC ADM DEVi TAIi PSD IVAi IVDi CONi HIS CNT"