Overloading Operators

ในบทนี้ คุณจะได้รู้จักและการใช้งานกับ Overloading Operators ที่เราจะใช้ในการทำการดำเนินการทางคณิตศาสตร์กับข้อมูลอื่นๆ เช่น ออบเจ็ค

Overloading Operators คืออะไร

Overloading Operators คือการเปลี่ยนแปลงวิธีการทำงานของตัวดำเนินการทางคณิตศาสตร์ให้ทำงานตามที่ต้องการ ยกตัวอย่างเช่น ในการบวกเลขสองตัวนั้น เป็นการนำค่าของพวกมันมารวมกัน ซึ่งมันใช้ได้กับตัวเลข เช่น 2 + 3 = 5

แต่สำหรับข้อมูลแบบอื่นเช่น ต้องการเอาน้ำสองแก้วมารวมกัน ข้อมูลที่มีอาจจะเป็นรัศมีของแก้ว หรืออื่นๆ ถ้าหากแก้วนั้นเป็นเหมือนออบเจ็ค มันจึงทำให้การทำงานเมื่อนำมารวมกันนั้น ไม่ได้เป้นเหมือนตัวเลข แต่เราใช้เครื่องหมาย + เช่นเดิม

นี่เป็นรูปแบบของการทำ Overloading Operators ในภาษา C#

class MyClass
{
public static MyClass1 operator + (MyClass2 a, MyClass3 b)
{
MyClass c = b;
return c;
}
}

จากรูปแบบข้างบนนั้นเป็นการทำ Overloading operators สำหรับคลาส MyClass1 สำหรับเครื่องหมาย + (บวก) โดยสร้างฟังก์ชันภายในคลาสนั้นให้เป็น static และใช้คำสั่ง operator ตามด้วยเครื่องหมายที่ทำการ Overload และส่งอากิวเมนต์สองตัวสำหรับ operand ทั้งสอง

การสร้างและการใช้ Overloading Operators

ในตัวอย่างนี้ เราจะขอยกตัวอย่างสำหรับการหาผลรวมน้ำในแก้วน้ำ โดยเราจะสร้างคลาสของแก้สน้ำขึ้นมา

using System;

namespace OverloadingOperators
{
class Program
{
static void Main(string[] args)
{
Glass g1 = new Glass(5.2f, 8);
Glass g2 = new Glass(3.2f, 10);

float totalvolume = g1 + g2;
Console.WriteLine("g1 and g2 sumation of volume = " + totalvolume);
}
}
}

class Glass
{
const float PI = 3.14F;

private float radius;
private float height;

public Glass (float r, float h)
{
radius = r;
height = h;
}

public static float operator +(Glass a, Glass b)
{
float totalvolume = a.GetVolume() + b.GetVolume();
return totalvolume;
}

public float GetVolume()
{
return (2 * radius * 3.14f) * height;
}
}

ในตัวอย่างเป็นการหาผลรวม ของออบเจ็คที่สร้างจากคลาส Glass และมีค่า return เป็น float โดยในคำสั่ง g1 + g2 นั้นเป็นการทำงานจากการ overloading และมเื่อรันโปรแกรมจะได้ผลลัพธ์ดังข้างล่าง

g1 and g2 sumation of volume = 462.208

เพื่อให้เข้าใจมากขึ้น การทำ overloading operators นั้นคล้ายกันกับ overloading method แต่สิ่งที่ต่างกันคือในการ return ค่าต้องเลือกสำหรับค่าใดค่าหนึ่งเท่านั้น ตัวอย่างต่อไปแทนที่เราส่งค่าผลรมของปริมาตรของแก้วทั้งสองกลับ เราจะทำการส่งแก้วใบใหม่ที่มีปริมาตรเท่าเดิมแทน

using System;

namespace OverloadingOperators
{
class Program
{
static void Main(string[] args)
{
Glass g1 = new Glass(5.2f, 8);
Glass g2 = new Glass(3.2f, 10);

Glass g3 = g1 + g2;
Console.WriteLine("g3 radius = " + g3.radius);
Console.WriteLine("g3 height = " + g3.radius);
Console.WriteLine("g3 volume = " + g3.GetVolume());
}
}
}

class Glass
{
const float PI = 3.14F;

public float radius;
public float height;

public Glass (float r, float h)
{
radius = r;
height = h;
}

public static Glass operator +(Glass a, Glass b)
{
float totalvolume = a.GetVolume() + b.GetVolume();
float totalArea = a.GetBaseArea() + b.GetBaseArea();

float newRadius = totalArea / 2 / PI;
float newHeight = totalvolume / totalArea;
Glass c = new Glass(newRadius, newHeight);
return c;
}

public float GetBaseArea()
{
return 2 * radius * PI;
}

public float GetVolume()
{
return (2 * radius * PI) * height;
}
}

ในตัวอย่าง นั้นเป็นการสร้าง overloading operators สำหรับออบเจ็คจากคลาส Glass เช่นเดิม แต่ตอนนี้ค่าที่ส่งกลับจำเป็นออบเจ็คของ Glass เช่นเดิม ที่มีปริมาตรเท่าเดิม และนี่เป็นผลลัพธ์เมื่อรันโปรแกรม

g3 radius = 8.4
g3 height = 8.4
g3 volume = 462.208

จากผลของโปรแกรมั้นเราได้ทำการเปลี่ยนให้เครื่องหมาย + สำหรับออบเจ็คของ Glass นั้น return ออบเจ็คของ Glass อันใหม่ ที่มีปริมาตรเท่าเดิม และมีรัศมีและความสูงใหม่เป็นอย่างที่เห็น

และแน่นอนคุณสามารถใช้เครื่องหมายเหล่านี้ ในการทำ overloading operators ในภาษา C#

OperatorsNumber of operand
+1 or 2
-1 or 2
!1
~1
++1
--1
*2
/2
%2
==2
!=2
<2
>2
<=2
>=2

ตัวอย่างการใช้งานต่างๆ

public static SomeObjectA operator - (SomeObjectB a, SomeObjectC b)
{
// do something
return ...; // SomeObjectA
}

public static bool operator == (SomeObjectB a, SomeObjectC b)
{
// do something
return ...; // SomeObjectA
}

public static SomeObjectA operator ++ (SomeObjectB a)
{
// do something
return ...; // SomeObjectA
}

ในบทนี้คุณได้รู้จักและได้รู้การสร้างและการใช้งาน Overloading operators เพื่อให้การทำงานเป็นไปตามที่ต้องการได้


บทความเกี่ยวกับ Overloading Operators

ตัวดำเนินการ ในภาษา C

ตัวดำเนินการจะถูกใช้กับตัวแปรและค่าคงที่ในการดำเนินการบางอย่าง เช่น การดำเนินการทางคณิตศาสตร์ ในภาษา C มีตัวดำเนินการประเภทต่างๆ ที่ทำหน้าที่แตกต่างกันไปข้างล่า...

ตัวดำเนินการ ในภาษา Java

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับตัวดำเนินการในภาษา Java และการใช้งานตัวดำเนินการ ในภาษา Java มีตัวดำเนินการประเภทต่างๆ ดังนี้ String concatenating operator หรื...

ตัวดำเนินการ ในภาษา Visual Basic

ตัวดำเนินการ ใช้สำหรับจัดการกับตัวแปรและค่าคงที่ ยกตัวอย่างเช่น การกำหนดค่า การเปรียบเทียบข้อมูล ตัวดำเนินการในภาษา Visual Basic นั้นมีหลายรูปแบบ นี่เป็นตัวดำเน...

ตัวดำเนินการ ในภาษา C++

ตัวดำเนินการถูกใช้เพื่อดำเนินการกับตัวแปรและค่าคงที่ ในภาษา C++ มีตัวดำเนินการประเภทต่างๆ นี่เป็นตัวดำเนินการที่สำคัญที่คุณจะต้องรู้จัก ตัวดำเนินการกำหนดค่านั้น...

ตัวดำเนินการ ในภาษา PHP

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับตัวดำเนินการในภาษา PHP เราจะให้คุณรู้จักตัวดำเนินการแต่ละประเภทและวิธีการใช้งานกับการเขียนโปรแกรมในรูปแบบต่างๆตัวดำเนินการ คือเ...