Lập trình D - Quá tải

D cho phép bạn chỉ định nhiều hơn một định nghĩa cho một function tên hoặc một operator trong cùng một phạm vi, được gọi là function overloadingoperator overloading tương ứng.

Khai báo quá tải là một khai báo đã được khai báo trùng tên với một khai báo trước đó trong cùng một phạm vi, ngoại trừ việc cả hai khai báo đều có các đối số khác nhau và rõ ràng là khác định nghĩa (thực thi).

Khi bạn gọi một quá tải function hoặc là operator, trình biên dịch xác định định nghĩa thích hợp nhất để sử dụng bằng cách so sánh các kiểu đối số mà bạn đã sử dụng để gọi hàm hoặc toán tử với các kiểu tham số được chỉ định trong định nghĩa. Quá trình chọn hàm hoặc toán tử được nạp chồng thích hợp nhất được gọi làoverload resolution..

Quá tải chức năng

Bạn có thể có nhiều định nghĩa cho cùng một tên hàm trong cùng một phạm vi. Định nghĩa của hàm phải khác nhau theo kiểu và / hoặc số lượng đối số trong danh sách đối số. Bạn không thể nạp chồng các khai báo hàm chỉ khác nhau theo kiểu trả về.

Thí dụ

Ví dụ sau sử dụng cùng một chức năng print() để in các kiểu dữ liệu khác nhau -

import std.stdio; 
import std.string; 

class printData { 
   public: 
      void print(int i) { 
         writeln("Printing int: ",i); 
      }

      void print(double f) { 
         writeln("Printing float: ",f );
      }

      void print(string s) { 
         writeln("Printing string: ",s); 
      } 
}; 
 
void main() { 
   printData pd = new printData();  
   
   // Call print to print integer 
   pd.print(5);
   
   // Call print to print float 
   pd.print(500.263); 
   
   // Call print to print character 
   pd.print("Hello D"); 
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Printing int: 5 
Printing float: 500.263 
Printing string: Hello D

Người vận hành quá tải

Bạn có thể xác định lại hoặc nạp chồng cho hầu hết các toán tử tích hợp sẵn có trong D. Do đó, một lập trình viên cũng có thể sử dụng các toán tử với các kiểu do người dùng xác định.

Các toán tử có thể được nạp chồng bằng cách sử dụng chuỗi op theo sau là Thêm, Phụ, v.v. dựa trên toán tử đang được nạp chồng. Chúng ta có thể nạp chồng toán tử + để thêm hai hộp như hình dưới đây.

Box opAdd(Box b) { 
   Box box = new Box(); 
   box.length = this.length + b.length; 
   box.breadth = this.breadth + b.breadth; 
   box.height = this.height + b.height; 
   return box; 
}

Ví dụ sau đây cho thấy khái niệm nạp chồng toán tử bằng cách sử dụng một hàm thành viên. Ở đây, một đối tượng được truyền dưới dạng một đối số có thuộc tính được truy cập bằng cách sử dụng đối tượng này. Đối tượng gọi toán tử này có thể được truy cập bằngthis toán tử như được giải thích bên dưới -

import std.stdio;

class Box { 
   public:  
      double getVolume() { 
         return length * breadth * height; 
      }

      void setLength( double len ) { 
         length = len; 
      } 

      void setBreadth( double bre ) { 
         breadth = bre; 
      }

      void setHeight( double hei ) { 
         height = hei; 
      }

      Box opAdd(Box b) { 
         Box box = new Box(); 
         box.length = this.length + b.length; 
         box.breadth = this.breadth + b.breadth; 
         box.height = this.height + b.height; 
         return box; 
      } 

   private: 
      double length;      // Length of a box 
      double breadth;     // Breadth of a box 
      double height;      // Height of a box 
}; 

// Main function for the program 
void main( ) { 
   Box box1 = new Box();    // Declare box1 of type Box 
   Box box2 = new Box();    // Declare box2 of type Box 
   Box box3 = new Box();    // Declare box3 of type Box 
   double volume = 0.0;     // Store the volume of a box here
   
   // box 1 specification 
   box1.setLength(6.0); 
   box1.setBreadth(7.0); 
   box1.setHeight(5.0);
   
   // box 2 specification 
   box2.setLength(12.0); 
   box2.setBreadth(13.0); 
   box2.setHeight(10.0); 
   
   // volume of box 1 
   volume = box1.getVolume(); 
   writeln("Volume of Box1 : ", volume);
   
   // volume of box 2 
   volume = box2.getVolume(); 
   writeln("Volume of Box2 : ", volume); 
   
   // Add two object as follows: 
   box3 = box1 + box2; 
   
   // volume of box 3 
   volume = box3.getVolume(); 
   writeln("Volume of Box3 : ", volume);  
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Volume of Box1 : 210 
Volume of Box2 : 1560 
Volume of Box3 : 5400

Các kiểu quá tải của nhà điều hành

Về cơ bản, có ba kiểu nạp chồng toán tử như được liệt kê dưới đây.

Sr.No. Quá tải các loại
1 Quá tải các nhà khai thác đơn lẻ
2 Quá tải toán tử nhị phân
3 Quá tải toán tử so sánh