Nếu cách khai báo và khởi tạo danh sách

Biến trong C++ được sử dụng để lưu trữ các giá trị. Mỗi một biến được lưu trữ ở các vị trí khác nhau trong bộ nhớ. Để tìm hiểu về kiểu biến và khai báo biến trong C++, bạn đọc cùng tham khảo tiếp bài học C++ dưới đây của Taimienphi.vn.

Mục lục bài viết

1. Biến trong C++

2. Kiểu biến trong C++

3. Khai báo và khởi tạo biến trong C++

4. Phạm vi biến trong C++

4.1. Biến toàn cục trong C++

4.2. Biến cục bộ trong C++

5. Một số kiểu biến đặc biệt trong C++

Biến trong C++

Biến là tên của vị trí bộ nhớ được cấp bởi trình biên dịch, tùy thuộc vào các kiểu dữ liệu của biến. Trong C++, biến có thể được khai báo theo nhiều cách khác nhau, yêu cầu bộ nhớ và các hàm khác nhau.

Kiểu biến trong C++

Trong C++, các biến phải được khai báo và phải được gán một kiểu. Cũng giống như các ngôn ngữ lập trình khác, C++ cũng hỗ trợ một số kiểu biến khác nhau. Dưới đây là bảng danh sách các kiểu biến trong C++:

Kiểu biến Mô tả

Bool Cho các biến để lưu trữ giá trị kiểu boolean [true hoặc false]

Char Cho các biến để lưu trữ giá trị kiểu ký tự

int Cho các biến với giá trị kiểu nguyên

Float hoặc double Cho các biến có giá trị kiểu thực dấu phẩy động và các giá trị lớn

Khai báo và khởi tạo biến trong C++

Biến phải được khai báo trước khi được sử dụng. Thông thường chúng ta khai báo biến khi bắt đầu chương trình, tuy nhiên trong C++, chúng ta có thể khai báo biến ở giữa chương trình, nhưng phải được khai báo trước khi sử dụng biến.

Cho ví dụ:

int i; // khai bao nhung khong khoi tao

char c;

int i, j, k; // khai bao nhieu

Khởi tạo biến tức là gán gián trị cho một biến đã được khai báo.

int i; // khai bao

i = 10; // khoi tao

Ngoài ra chúng ta cũng có thể khai báo và khởi tạo biến đồng thời:

int i=10; //khoi tao va khai bao trong cung mot buoc

int i=10, j=11;

Nếu một biến được khai báo nhưng không được khởi tạo theo mặc định đồng nghĩa với việc nó lưu giá trị rác. Ngoài ra nếu một biến đã được khai báo, nếu cố gắng khai báo lại lần nữa, bạn sẽ nhận được thông báo lỗi compile time.

int i,j;

i=10;

j=20;

int j=i+j; //compile time error, cannot redeclare a variable in same scope

Phạm vi biến trong C++

Tất cả các biến có khu vực, nơi chương trình biến hoạt động riêng, biến sẽ không lưu trữ các giá trị ngoài phạm vi và phạm vi này được gọi là phạm vi của biến. Trong hầu hết các trường hợp, biến được khai báo trong dấu ngoặc nhọn được gọi là biến tồn tại.

Trong C++ bao gồm 2 phạm vi biến:

- Biến toàn cục [Global Variable].

- Biến cục bộ [Local variable].

Biến toàn cục trong C++

Các biến toàn cục là các biến đã được khai báo 1 lần và các lớp hoặc hàm bất kỳ có thể sử dụng trong suốt vòng đời của chương trình. Các biến này phải được khao báo bên ngoài hàm main []. Nếu chỉ được khai báo, chúng có thể được gán các giá trị khác nhau tại các thời điểm khác nhau trong vòng đời chương trình.

Trong trường hợp nếu được khai báo và khởi tạo cùng lúc bên ngoài hàm main [], các biến này có thể được gán các giá trị bất kỳ tại điểm bất kỳ trong chương trình.

Ví dụ dưới đây minh họa biến toàn cục chỉ khai báo và không được khởi tạo:

Biến cục bộ trong C++

Biến cục bộ là các biến nằm trong dấu ngoặc nhọn. Các biến này không có sẵn bên ngoài phạm vi này và sẽ trả về lỗi compile time.

Dưới đây là ví dụ về biến cục bộ trong C++:

Một số kiểu biến đặc biệt trong C++

Ngoài ra còn có một số từ khóa đặc biệt khác trong C++, được sử dụng để thông báo các đặc điểm duy nhất của các biến trong chương trình, bao gồm:

- Final: Sau khi được khởi tạo, giá trị của nó không thể thay đổi.

- Static: Các biến này lưu giá trị của chúng trong các lệnh gọi hàm.

Ví dụ:

Như vậy trên đây Taimienphi.vn vừa giới thiệu cho bạn về biến, các kểu biến và khai báo biến trong C++. Nếu có bất kỳ thắc mắc hoặc câu hỏi nào cần giải đáp như Comment trong C++, bạn đọc có thể để lại ý kiến của mình trong phần bình luận bên dưới bài viết, Taimienphi.vn sẽ giải đáp các thắc mắc của bạn sớm nhất có thể.

Trong bài học C++ dưới đây Taimienphi.vn sẽ giới thiệu tiếp cho bạn về kiểu biến và khai báo biến trong C++, ngoài ra bạn đọc có thể tham khảo thêm một số bài viết đã có trên Taimienphi.vn để tìm hiểu thêm về các kiểu dữ liệu trong C++.

Con trỏ [pointer] trong C Hằng và cách sử dụng hằng trong C# Vòng lặp [loop] trong C# Number trong C++ Các kiểu dữ liệu trong C# Namespace trong C# là gì?

Trong bài trước, để đơn giản, chúng ta đã khởi tạo các biến thành viên của class bằng toán tử gán, ví dụ:

/** * Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam * * @author cafedevn * Contact: * Fanpage: //www.facebook.com/cafedevn * Instagram: //instagram.com/cafedevn * Twitter: //twitter.com/CafedeVn * Linkedin: //www.linkedin.com/in/cafe-dev-407054199/ */ class Something { private: int m_value1; double m_value2; char m_value3; public: Something[] { // These are all assignments, not initializations m_value1 = 1; m_value2 = 2.2; m_value3 = 'c'; } };

Khi hàm constructor của class được thực thi, biến m_value1, m_value2, và m_value3 sẽ được tạo ra. Sau đó, phần thân hàm của hàm constructor sẽ được chạy, tại đây, các biến dữ liệu thành viên sẽ được gán cho các giá trị. Quá trình này tương tự với luồng hoạt động của đoạn code C++ không hướng đối tượng sau:

int m_value1; double m_value2; char m_value3; m_value1 = 1; m_value2 = 2.2; m_value3 = 'c';

Mặc dù đoạn code trên là hợp lệ khi xét về khía cạnh cú pháp của ngôn ngữ C++, nhưng đây không phải là một phong cách viết code tốt [và có thể kém hiệu quả hơn so với khởi tạo bằng constructor].

Tuy nhiên, như bạn đã được học trong những bài trước, một số kiểu dữ liệu [ví dụ: hằng và các biến tham chiếu] phải được khởi tạo ngay khi khai báo. Chúng ta cùng xem ví dụ sau:

class Something { private: const int m_value; public: Something[] { m_value = 1; // error: const vars can not be assigned to } };

Đoạn code trên thì tương tự với:

const int m_value; // error: const vars must be initialized with a value m_value = 5; // error: const vars can not be assigned to

Do đó, ta có thể thấy rằng, việc gán các giá trị cho các biến thành viên thuộc kiểu tham chiếu hoặc hằng trong phần thân hàm của constructor rõ ràng là không đủ trong một số trường hợp.

1. Khởi tạo một danh sách các biến thành viên – Member initializer lists

Để giải quyết vấn đề này, C++ đã cung cấp một phương thức để khởi tạo các biến thành viên của class [thay vì gán các giá trị cho chúng sau khi chúng được tạo ra] thông qua một danh sách khởi tạo biến thành viên – member initializer list [thường được gọi là “member initialization list”]. Đừng nhầm lẫn những cái tên này với initializer list mà chúng ta sử dụng để gán các giá chị cho mảng.

Chúng ta có thể khởi tạo các biến bằng 3 cách: Sao chép, trực tiếp, và thông qua cú pháp khởi tạo đồng đều – uniform initialization.

int value1 = 1; // copy initialization double value2[2.2]; // direct initialization char value3 {'c'}; // uniform initialization

Initialization list có cách sử dụng gần như giống hệt với direct initialization [khởi tạo trực tiếp] hoặc uniform initialization [khởi tạo đồng đều].

Bởi vì cách tốt nhất để học những điều mới là thông qua các ví dụ, nên ta cùng xem lại đoạn code thực hiện các phép gán trong phần thân hàm của constructor:

class Something { private: int m_value1; double m_value2; char m_value3; public: Something[] { // These are all assignments, not initializations m_value1 = 1; m_value2 = 2.2; m_value3 = 'c'; } };

Bây giờ, hãy thử viết lại đoạn code trên nhưng sử dụng một initialization list:

/** * Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam * * @author cafedevn * Contact: * Fanpage: //www.facebook.com/cafedevn * Instagram: //instagram.com/cafedevn * Twitter: //twitter.com/CafedeVn * Linkedin: //www.linkedin.com/in/cafe-dev-407054199/ */ class Something { private: int m_value1; double m_value2; char m_value3; public: Something[] : m_value1{ 1 }, m_value2{ 2.2 }, m_value3{ 'c' } // directly initialize our member variables { // No need for assignment here } void print[] { std::cout

Chủ Đề