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.0105 sec