Computer >> Máy Tính >  >> Lập trình >> C ++

Ủy quyền xây dựng trong C ++

Sau đây chúng ta sẽ xem đoàn khởi tạo là gì? Khi một phương thức khởi tạo gọi phương thức khởi tạo khác của cùng một lớp, thì nó được gọi là ủy quyền của phương thức khởi tạo. Tính năng này có từ C ++ 11.

Hãy để chúng tôi xem chương trình sau và cố gắng phân tích những khó khăn trong mã này là gì.

Ví dụ

#include <iostream>
using namespace std;
class MyClass {
   int a, b, c;
   public:
   MyClass(){
      a = b = c = 0;
   }
   MyClass(int c) {
      // Initializing a and b are redundent, only c initialization is needed here
      a = 0;
      b = 0;
      this->c = c;
   }
   void display(){
      cout << "a : " << a << ", b : " << b << ", c : " << c;
   }
};
main() {
   MyClass my_obj(5);
   my_obj.display();
}

Đầu ra

a : 0, b : 0, c : 5

Ở đây chúng ta có thể thấy rằng mã đang hoạt động tốt, nhưng có một số mã thừa. Hàm tạo không tham số có thể đặt giá trị của a và b là 1. Vì vậy, nếu chúng ta sử dụng hàm tạo đầu tiên vào hàm thứ hai thì sẽ hiệu quả hơn. Vì lý do này, chúng tôi phải sử dụng phương thức được gọi là ủy quyền phương thức khởi tạo.

Ví dụ

#include <iostream>
using namespace std;
class MyClass {
   int a, b, c;
   public:
   MyClass(){
      a = b = c = 0;
   }
   MyClass(int c) : MyClass(){ //using constructor delegation
      this->c = c;
   }
   void display(){
      cout << "a : " << a << ", b : " << b << ", c : " << c;
   }
};
main() {
   MyClass my_obj(5);
   my_obj.display();
}

Đầu ra

a : 0, b : 0, c : 5