无涯教程-D语言 - 重载

43 阅读2分钟

重载指与其它函数具有相同的函数名,但参数不相同的函数实现。

函数重载

在同一个作用域中,可以为同一个函数名具有多个定义。函数的定义必须在参数列表中的参数类型/数量上彼此不同。

以下示例使用相同的函数 print()打印不同的数据类型-

import std.stdio; 
import std.string; 

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

  </span><span class="kwd">void</span><span class="pln"> </span><span class="kwd">print</span><span class="pun">(</span><span class="kwd">double</span><span class="pln"> f</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
     writeln</span><span class="pun">(</span><span class="str">"Printing float: "</span><span class="pun">,</span><span class="pln">f </span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">void</span><span class="pln"> </span><span class="kwd">print</span><span class="pun">(</span><span class="kwd">string</span><span class="pln"> s</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
     writeln</span><span class="pun">(</span><span class="str">"Printing string: "</span><span class="pun">,</span><span class="pln">s</span><span class="pun">);</span><span class="pln"> 
  </span><span class="pun">}</span><span class="pln"> 

};

void main() { printData pd=new printData();

//调用 print 打印整数 pd.print(5);

//调用 print 打印浮点数 pd.print(500.263);

//调用print打印字符 pd.print("Hello Learnfk"); }

编译并执行上述代码后,将产生以下输出-

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

运算符重载

您可以重新定义或重载D中可用的大多数内置运算符。

可以根据正在重载的运算符,使用字符串op紧随其后的Add,Sub等来重载运算符,我们可以使运算符+重载以添加两个框,如下所示。

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

对象作为参数传递,其属性可以使用该对象访问,可以使用 this 运算符访问调用该运算符的对象 ,如下所述-

import std.stdio;

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

  </span><span class="kwd">void</span><span class="pln"> setLength</span><span class="pun">(</span><span class="pln"> </span><span class="kwd">double</span><span class="pln"> len </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
     length</span><span class="pun">=</span><span class="pln">len</span><span class="pun">;</span><span class="pln"> 
  </span><span class="pun">}</span><span class="pln"> 

  </span><span class="kwd">void</span><span class="pln"> setBreadth</span><span class="pun">(</span><span class="pln"> </span><span class="kwd">double</span><span class="pln"> bre </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
     breadth</span><span class="pun">=</span><span class="pln">bre</span><span class="pun">;</span><span class="pln"> 
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">void</span><span class="pln"> setHeight</span><span class="pun">(</span><span class="pln"> </span><span class="kwd">double</span><span class="pln"> hei </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
     height</span><span class="pun">=</span><span class="pln">hei</span><span class="pun">;</span><span class="pln"> 
  </span><span class="pun">}</span><span class="pln">

  </span><span class="typ">Box</span><span class="pln"> opAdd</span><span class="pun">(</span><span class="typ">Box</span><span class="pln"> b</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
     </span><span class="typ">Box</span><span class="pln"> box</span><span class="pun">=</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Box</span><span class="pun">();</span><span class="pln"> 
     box</span><span class="pun">.</span><span class="pln">length</span><span class="pun">=</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">length </span><span class="pun">+</span><span class="pln"> b</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> 
     box</span><span class="pun">.</span><span class="pln">breadth</span><span class="pun">=</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">breadth </span><span class="pun">+</span><span class="pln"> b</span><span class="pun">.</span><span class="pln">breadth</span><span class="pun">;</span><span class="pln"> 
     box</span><span class="pun">.</span><span class="pln">height</span><span class="pun">=</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">height </span><span class="pun">+</span><span class="pln"> b</span><span class="pun">.</span><span class="pln">height</span><span class="pun">;</span><span class="pln"> 
     </span><span class="kwd">return</span><span class="pln"> box</span><span class="pun">;</span><span class="pln"> 
  </span><span class="pun">}</span><span class="pln"> 

private: double length; //长 double breadth; //宽 double height; //高 };

//主函数 void main( ) { Box box1=new Box(); //实例化box1 Box box2=new Box(); Box box3=new Box(); double volume=0.0; //存储体积变量

//box1赋值 box1.setLength(6.0); box1.setBreadth(7.0); box1.setHeight(5.0);

//box2赋值 box2.setLength(12.0); box2.setBreadth(13.0); box2.setHeight(10.0);

//box1体积 volume=box1.getVolume(); writeln("Volume of Box1 : ", volume);

//box2体积 volume=box2.getVolume(); writeln("Volume of Box2 : ", volume);

//添加两个对象如下: box3=box1 + box2;

//volume of box 3 volume=box3.getVolume(); writeln("Volume of Box3 : ", volume);
}

编译并执行上述代码后,将产生以下输出-

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

参考链接

www.learnfk.com/d-programmi…