Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Ủy quyền hàm tạo (Constructor Delegation) trong C++


Ủ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