D Programlama - Aşırı Yükleme

D, bir function isim veya bir operator aynı kapsamda denen function overloading ve operator overloading sırasıyla.

Aşırı yüklenmiş bir bildirim, her iki bildirimin de farklı argümanlara ve açıkça farklı bir tanıma (uygulamaya) sahip olması dışında, aynı kapsamdaki önceki bir bildirimle aynı adla bildirilmiş bir bildirimdir.

Aşırı yüklü aradığınızda function veya operatorderleyici, işlev veya işleci çağırmak için kullandığınız bağımsız değişken türlerini tanımlarda belirtilen parametre türleriyle karşılaştırarak kullanılacak en uygun tanımı belirler. En uygun aşırı yüklenmiş işlevi veya operatörü seçme işlemine deniroverload resolution..

Fonksiyon Aşırı Yüklemesi

Aynı kapsamda aynı işlev adı için birden fazla tanımınız olabilir. İşlevin tanımı, türler ve / veya bağımsız değişken listesindeki bağımsız değişkenlerin sayısı açısından birbirinden farklı olmalıdır. Yalnızca dönüş türüne göre farklılık gösteren işlev bildirimlerini aşırı yükleyemezsiniz.

Misal

Aşağıdaki örnek aynı işlevi kullanır print() farklı veri türlerini yazdırmak için -

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"); 
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

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

Operatör Aşırı Yüklemesi

D'de bulunan yerleşik operatörlerin çoğunu yeniden tanımlayabilir veya aşırı yükleyebilirsiniz. Böylece bir programcı, kullanıcı tanımlı tiplere sahip operatörleri de kullanabilir.

Operatörler, dize op ve ardından Add, Sub vb. Kullanılarak aşırı yüklenen operatöre göre aşırı yüklenebilir. Aşağıda gösterildiği gibi iki kutu eklemek için + operatörünü aşırı yükleyebiliriz.

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; 
}

Aşağıdaki örnek, bir üye işlevi kullanarak operatör aşırı yükleme kavramını gösterir. Burada bir nesne, özelliklerine bu nesne kullanılarak erişilen bir argüman olarak aktarılır. Bu operatörü çağıran nesneye, kullanılarak erişilebilirthis operatör aşağıda açıklandığı gibi -

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);  
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

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

Operatör Aşırı Yüklenme Tipleri

Temel olarak, aşağıda listelendiği gibi üç tür operatör aşırı yüklemesi vardır.

Sr.No. Aşırı Yükleme Türleri
1 Tekli Operatörler Aşırı Yükleniyor
2 İkili Operatörlerin Aşırı Yüklenmesi
3 Karşılaştırma Operatörleri Aşırı Yükleniyor