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 overloading và operator 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 |