Các hàm khởi tạo cũng có thể được nạp chồng, tùy thuộc vào nhu cầu và yêu cầu cụ thể. Class sau đây →
1 2 3 4 5 6 7 8 9 |
class Sample { public: Sample(void) { this -> value = -1; } Sample(int val) { this -> value = val; } void setVal(int value) { this -> value = value; } int getVal(void) { return value; } private: int value; }; |
có hai hàm khởi tạo khác nhau với số lượng các tham số khác nhau. Hàm khởi tạo thứ hai cần một tham số (trong khi hàm đầu tiên không có tham số) và gán giá trị cho trường value bằng giá trị của tham số đầu vào. Hàm khởi tạo sẽ được chọn trong quá trình tạo ra đối tượng. Hãy xem đoạn code dưới đây:
1 2 3 |
Sample object1, object2(100); cout << object1.getVal() << endl; cout << object2.getVal() << endl; |
Đối tượng object1 sẽ được tạo ra bằng cách sử dụng constructor không có tham số, trong khi object2 sẽ được tạo ra bằng constructor có một tham số.
Đoạn code sẽ xuất ra các giá trị sau:
1 2 |
-1 100 |
Lưu ý rằng bạn không thể yêu cầu trình biên dịch sử dụng một constructor không tồn tại – điều này có nghĩa là các đoạn code sau đây là sai:
1 |
Sample objectx(2,100); |