E D R , A S I H C RSS

Double Dispatch

DoubleDispatch

IntegerŠ” ํดž˜Šค™€ FloatŠ” ํดž˜Šค€ žˆ‹ค. ‘ ฐฒด „˜ ง…ˆ„ ตฌํ˜„ํ•˜ณ  ‹ถ‹ค. ช‡ฐœ ตฌํ˜„ํ•ด•ํ• Œ? 4ฐœ‹ค. ฆ‰, Integer + Integer, Float + Float, Integer + Float, Float + Integerด ‡ฒŒ งด‹ค. ด ํ•ดฒฐํ•˜ธฐ œ„ํ•œ  ˆฐจ  ฐฉฒ•€ ชจ“  ƒํ™ฉ„ Œ€ํ•œ case ตฌฌธ— „Š” ฒƒด‹ค. ดฒƒ€ ํ•œตฐฐ—‹ค€ กœง„ ‹ค „„ ˆ˜ žˆ‹คŠ” žฅ ด žˆŒ—„ ถˆตฌํ•˜ณ , œ €ณดˆ˜€ –ด ต‹ค.
šฐฆฌ˜ ํ•ดฒฐ…€, „‚ฐ— —ฐ€œ ‘ ฐฒด –ป–ด˜คŠ” ฉ”„€˜ „ธต„ ถ”€ํ•˜Š” ฒƒด‹ค.(?) ดฒƒ€ งŽ€ ฉ”„€ งŒ“คฒŒ ˜€งŒ, ทธ ณตžกํ•จ˜ €˜€ žˆ‹ค.

argument— ฉ”„€ ณด‚ด. selector—‹ค€ receiver˜ ํดž˜Šค „ž„„ งถ™ธ‹ค. receiver argumentกœ „˜ธด‹ค. ด ํŒจํ„„ ‚ฌšฉํ•œ ํ›„˜ Integer, Float ฝ”“œŠ” ‹คŒ ฐ™‹ค.
~cpp 
Integer Integer::operator+(const Number& aNumber)
{
	return aNumber.addInteger(this);
}

Float Float::operator+(const Number& aNumber)
{
	return aNumber.addFloat(this);
}

Integer Integer::addInteger(const Integer& anInteger)
{
	return Integer(this + anInteger);
}

Float Float::addFloat(const Float& aFloat)
{
	return Float(this + aFloat);
}

Float Integer::addFloat(const Float& aFloat)
{
	return asFloat().addFloat(aFloat); // Integer Floatกœ ฐ”ฟ”€ ‹คŒ „‚ฐ
}

Integer Float::addInteger(const Integer& anInteger)
{
	return addFloat(anInteger.asFloat());
}

—ญ‹œ ™„ฒฝํ•œ ดํ•ดŠ” ชปํ–ˆ‹ค. € ” ด• ํ• “ ‹ถ‹ค.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:09
Processing time 0.0116 sec