Cú pháp:
class Sample
{
public:
int Sam_x;
int Sam_y;
Sample(): Sam_x(1), Sam_y(2) /* Classname: Initialization List */
{
// Constructor body
}
};
Danh sách cần khởi tạo:
class Sample
{
public:
int Sam_x;
int Sam_y;
Sample() */* Object and variables are created - i.e.:declaration of variables */*
{ // Constructor body starts
Sam_x = 1; */* Defining a value to the variable */*
Sam_y = 2;
} // Constructor body ends
};
trong chương trình trên, khi hàm tạo của lớp được thực thi, Sam_x và Sam_y được tạo. Sau đó, trong thân xây dựng, các biến dữ liệu thành viên được xác định.
Trường hợp sử dụng:
- Các biến Const và Reference trong một Class
Trong C, các biến phải được xác định trong quá trình tạo. tương tự như trong C ++, chúng ta phải khởi tạo biến Const và Reference trong quá trình tạo đối tượng bằng cách sử dụng danh sách Khởi tạo. nếu chúng ta khởi tạo sau khi tạo đối tượng (bên trong thân hàm xây dựng), chúng ta sẽ gặp lỗi thời gian biên dịch.
Các đối tượng thành viên của lớp Sample1 (cơ sở) không có hàm tạo mặc định
class Sample1
{
int i;
public:
Sample1 (int temp)
{
i = temp;
}
};
// Class Sample2 contains object of Sample1
class Sample2
{
Sample1 a;
public:
Sample2 (int x): a(x) /* Initializer list must be used */
{
}
};
Trong khi tạo đối tượng cho lớp dẫn xuất, nó sẽ gọi bên trong hàm tạo của lớp dẫn xuất và gọi hàm tạo của lớp cơ sở (mặc định). nếu lớp cơ sở không có hàm tạo mặc định, người dùng sẽ gặp lỗi thời gian biên dịch. Để tránh, chúng ta phải có một trong hai
1. Default constructor of Sample1 class
2. Initialization list in Sample2 class which will call the parametric constructor of Sample1 class (as per above program)
Tên tham số của hàm tạo lớp và thành viên dữ liệu của một lớp giống nhau:
class Sample3 {
int i; /* Member variable name : i */
public:
Sample3 (int i) /* Local variable name : i */
{
i = i;
print(i); /* Local variable: Prints the correct value which we passed in constructor */
}
int getI() const
{
print(i); /*global variable: Garbage value is assigned to i. the expected value should be which we passed in constructor*/
return i;
}
};
Như chúng ta đã biết, biến cục bộ có mức ưu tiên cao nhất sau đó là biến toàn cục nếu cả hai biến có cùng tên. Trong trường hợp này, chương trình xem xét giá trị "i" {cả biến bên trái và bên phải. tức là: i = i} là biến cục bộ trong hàm tạo mẫu 3 () và biến thành viên lớp (i) có ghi đè. Để tránh, chúng ta phải sử dụng một trong hai
1. Initialization list
2. this operator.