Ủy quyền hàm tạo (constructor delegation) là khi một hàm tạo gọi hàm tạo khác của cùng lớp. Tính năng này có từ C++11.
Xem chương trình sau để hiểu vấn đề:
Ví dụ (chưa dùng ủy quyền)
#include <iostream>
using namespace std;
class MyClass {
int a, b, c;
public:
MyClass() {
a = b = c = 0;
}
MyClass(int c) {
// Khởi tạo a và b thừa thãi, chỉ cần khởi tạo c
a = 0;
b = 0;
this->c = c;
}
void display() {
cout << "a : " << a << ", b : " << b << ", c : " << c;
}
};
main() {
MyClass my_obj(5);
my_obj.display();
}
Kết quả
a : 0, b : 0, c : 5
Mã chạy đúng nhưng có code thừa. Hàm tạo không tham số đã khởi tạo a, b = 0. Nếu dùng hàm tạo đầu tiên trong hàm tạo thứ hai thì hiệu quả hơn. Đó là constructor delegation.
Ví dụ (dùng ủy quyền)
#include <iostream>
using namespace std;
class MyClass {
int a, b, c;
public:
MyClass() {
a = b = c = 0;
}
MyClass(int c) : MyClass() { // dùng constructor delegation
this->c = c;
}
void display() {
cout << "a : " << a << ", b : " << b << ", c : " << c;
}
};
main() {
MyClass my_obj(5);
my_obj.display();
}
Kết quả
a : 0, b : 0, c : 5