Ŭ·¡½ºÀÇ ¿¬»êÀÚ ÇÔ¼ö¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀº ´ÙÀ½ µÎ°¡Áö°¡ ÀÖ´Ù.
¨ç Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö·Î ÀÛ¼ºÇÑ´Ù.
¨è Àü¿ª ÇÔ¼ö·Î ÀÛ¼ºÇÑ´Ù.
¿ì¼± »ó´ëÀûÀ¸·Î Á» ´õ °£´ÜÇÑ ¸â¹ö ¿¬»êÀÚ ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ´Â Çü½ÄºÎÅÍ ¾Ë¾Æº¸ÀÚ. Àü¿ª ÇÔ¼ö·Î ÀÛ¼ºÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼´Â ´ÙÀ½ Àý¿¡¼ »ó¼¼ÇÏ°Ô ¾Ë¾Æº¼ °ÍÀÌ´Ù. ¸â¹ö ¿¬»êÀÚ ÇÔ¼öÀÇ ±âº» Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
¸®ÅÏŸÀÔ Class::operator ¿¬»êÀÚ(Àμö ¸ñ·Ï)
{
ÇÔ¼ö º»Ã¼;
}
ÀϹÝÀûÀÎ ¸â¹ö ÇÔ¼ö ¼±¾ð¹®°ú µ¿ÀÏÇ쵂 ÇÔ¼ö À̸§ÀÌ Å°¿öµå operator¿Í ¿¬»êÀÚ·Î ±¸¼ºµÇ¾î ÀÖ´Ù´Â Á¡¸¸ ´Ù¸£´Ù. ¿¬»êÀÚ ÀÚ¸®¿¡´Â +, -, *, /, <<, != µî ´ëºÎºÐÀÇ ¿¬»êÀÚ ±âÈ£°¡ ¿Ã ¼ö ÀÖ´Ù. ÀÌ Çü½Ä´ë·Î ¾Õ Ç׿¡¼ ÀÛ¼ºÇÑ ComplexAdd ¿¹Á¦ÀÇ Complex Ŭ·¡½º¿¡ µ¡¼À ¿¬»êÀÚ¸¦ Ãß°¡ÇØ º¸ÀÚ.
class Complex
{
private:
double real;
double image;
public:
Complex() { }
Complex(double r, double i) : real(r), image(i) { }
void OutComplex() const { printf("%.2f+%.2fi\n",real,image); }
const Complex operator +(const Complex &T) const {
Complex R;
R.image = image + T.image;
R.real = real + T.real;
return R;
}
};
Àӽà °´Ã¼ RÀ» ¼±¾ðÇϰí R¿¡ µ¡¼À °á°ú¸¦ ÀÛ¼ºÇ쵂 Çã¼öºÎ¿Í ½Ç¼öºÎ¸¦ °¢°¢ µû·Î ´õÇß´Ù. ÀÌ ¿¬»êÀÚ°¡ Á¤ÀǵǸé ÀÌÁ¦ Complex °´Ã¼¿¡ ´ëÇØ + ¿¬»êÀÚ·Î °£ÆíÇÏ°Ô µ¡¼ÀÀ» ÇÒ ¼ö ÀÖÀ¸¸ç Complex°¡ ±âº»Çü°ú ºñ½ÁÇÑ ÀÚ°ÝÀ» °¡Áö°Ô µÈ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.
1.10+2.20i
3.30+4.40i
4.40+6.60i
C3=C1+C2 ¿¬»ê¹®¿¡ ÀÇÇØ µÎ º¹¼Ò¼ö°¡ Á¦´ë·Î ´õÇØÁ³´Ù. ¸â¹ö ¿¬»êÀÚ ÇÔ¼öÀÇ ¿øÇüÀÌ ´Ù¼Ò º¹ÀâÇѵ¥ ÀÌ ¿øÇüÀ» °£·«ÇÏ°Ô ºÐ¼®ÇØ º¸¸é ´ÙÀ½°ú °°´Ù.

Ŭ·¡½º ¼±¾ð¹® ³»ºÎÀÇ ÀζóÀÎ ÇÔ¼ö·Î Á¤ÀÇÇ߱⠶§¹®¿¡ ÇÔ¼ö¸í¾Õ¿¡ ¼Ò¼Ó Ŭ·¡½º¿¡ ´ëÇÑ Ç¥±â(Complex::)´Â ºüÁ® Àִµ¥ ¿ÜºÎ¿¡¼ Á¤ÀÇÇÑ´Ù¸é Complex::operator + µîÀ¸·Î ¼Ò¼Ó Ŭ·¡½º À̸§µµ ¹àÇô¾ß ÇÑ´Ù. ÀÌ ¿¹¸¦ ÅëÇØ ¸â¹ö ¿¬»êÀÚ ÇÔ¼öÀÇ °¢ ¿ä¼Ò¿¡ ´ëÇØ »ó¼¼ÇÏ°Ô ¿¬±¸ÇØ º¸ÀÚ. °¢°¢ÀÇ const Ű¿öµå°¡ °¡Áö´Â ÀǹÌ, ·¹ÆÛ·±½º¸¦ ³Ñ±â´Â ÀÌÀ¯, °ªÀ» ¸®ÅÏÇÏ´Â ÀÌÀ¯ µîÀÌ ³ª¸§´ë·Î º¹ÀâÇÏ´Ù.
¿¬»êÀÚ ÇÔ¼öÀÇ Àμö¶õ ÇÇ¿¬»êÀÚ¸¦ ÀǹÌÇϴµ¥ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ÀÚ±â ÀÚ½Å(this)°ú ÇÔ¼ö·Î Àü´ÞµÇ´Â Àμö°¡ ¿¬»ê ´ë»óÀÌ´Ù. ÀÌÇ× ¿¬»êÀÚÀÇ °æ¿ì ¸â¹ö ¿¬»êÀÚ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °´Ã¼°¡ Áº¯ÀÌ µÇ°í Àμö·Î Àü´ÞµÇ´Â ´ë»óÀÌ ¿ìº¯ÀÌ µÈ´Ù.

¿øÄ¢ÀûÀ¸·Î ¿¬»êÀÚ ÇÔ¼öÀÇ Àμö´Â ÀÓÀÇÀÇ Å¸ÀÔÀ» ¸ðµÎ ¹Þ¾ÆµéÀÏ ¼ö ÀÖÁö¸¸ ³í¸®ÀûÀ¸·Î °´Ã¼¿Í ¿¬»ê °¡´ÉÇÑ ´ë»óÀ̾î¾ß ÇÑ´Ù. Complex °´Ã¼ÀÇ °æ¿ì ´Ù¸¥ Complex °´Ã¼³ª ½Ç¼ö ¶Ç´Â Á¤¼öÇüÀÌ ÇÇ¿¬»ê ´ë»óÀÌ µÉ ¼ö ÀÖ´Ù. º¹¼Ò¼ö¸¦ º¹¼Ò¼ö¿Í µ¡¼ÀÇÏ´Â °ÍÀº ³í¸®ÀûÀ¸·Î ÇÕ´çÇÏÁö¸¸ º¹¼Ò¼ö¿¡ ½Ã°£À» ´õÇϰųª Person, Position µûÀ§ÀÇ ÀüÇô °ü·Ã¾ø´Â °´Ã¼¸¦ ´õÇÏ´Â °ÍÀº º° Àǹ̰¡ ¾ø´Ù. ÀڽŰú °°Àº ŸÀÔÀÇ ´Ù¸¥ °´Ã¼ÀÎ °æ¿ì°¡ °¡Àå º¸ÆíÀûÀÌ°í °¡²û ȣȯµÇ´Â ŸÀÔ°ú ¿¬»êÇϱ⵵ ÇÑ´Ù.
°´Ã¼´Â °ªÀ¸·Î ³Ñ±æ ¼öµµ ÀÖÁö¸¸ ¾Æ¹«·¡µµ ±âº»Çüº¸´Ù´Â µ¢Ä¡°¡ Å©±â ¶§¹®¿¡ °ªÀ¸·Î ³Ñ±â¸é ºñÈ¿À²ÀûÀ̹ǷΠ·¹ÆÛ·±½º·Î ³Ñ±â´Â °ÍÀÌ À¯¸®ÇÏ´Ù. Àμö T¾Õ¿¡ &±âÈ£¸¦ »©°í °ªÀ¸·Î ³Ñ°Üµµ µ¿ÀÛ¿¡´Â º° ÀÌ»óÀº ¾øÁö¸¸ °´Ã¼°¡ Ä¿Áö¸é ´Ù¼Ò ´À¸± °ÍÀÌ´Ù. Æ÷ÀÎÅ͸¦ ³Ñ±â´Â °Íµµ ¿¬»êÀÚ ÇÔ¼ö°¡ ÇÇ¿¬»ê ´ë»óÀ» ÀÐÀ» ¼ö ÀÖÀ¸¹Ç·Î ÀÏ´Ü °¡´ÉÀº ÇÏ´Ù. À§ ¿¹Á¦ÀÇ + ¿¬»êÀÚ¸¦ ´ÙÀ½°ú °°ÀÌ Complex *¸¦ ¹Þµµ·Ï ¼öÁ¤ÇØ º¸ÀÚ.
Complex operator +(const Complex *T) const {
Complex R;
R.image = image + T->image;
R.real = real + T->real;
return R;
}
Æ÷ÀÎÅÍ·Î ³Ñ°ÜÁø ÇÇ¿¬»êÀÚÀÇ ¸â¹ö¸¦ ÂüÁ¶ÇÏ·Á¸é . ¿¬»êÀÚ ´ë½Å ->¿¬»êÀÚ¸¦ »ç¿ëÇϱ⸸ ÇÏ¸é µÈ´Ù. ±×·¯³ª ¿¬»êÀÚ ÇÔ¼ö°¡ Æ÷ÀÎÅ͸¦ ¹Þ¾ÆµéÀ̸é ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ÇÇ¿¬»êÀÚÀÇ ÁÖ¼Ò¸¦ ³Ñ°Ü¾ß ÇϹǷΠȣÃâºÎÀÇ ¸ð¾çÀÌ C3=C1.operator +(&C2);°¡ µÉ °ÍÀ̰í À̸¦ ¿¬»ê½ÄÀ¸·Î Ç¥ÇöÇϸé C3=C1+&C2; °¡ µÇ´Âµ¥ ÀÌ·± Çü½ÄÀº ¿¬»ê¹®ÀÇ ÀϹÝÀûÀΠǥ±â¹ý¿¡ ¾î±ß³ª¸ç ÀüÇô Á÷°üÀûÀÌÁö ¸øÇÏ´Ù. Á¤¼öÇüÀÇ °æ¿ì i=j+&k;·Î ¿¬»êÇÏÁö ¾Ê´Â °Í°ú ¸¶Âù°¡ÁöÀÌ´Ù.
¿¬»êÀÚ ¿À¹ö·ÎµùÀÇ ¸ñÀûÀº °´Ã¼ÀÇ ¿¬»ê¹®À» ±âº»Çü°ú °°Àº ¹æ¹ýÀ¸·Î Ç¥ÇöÇÔÀ¸·Î½á °¡µ¶¼ºÀ» ³ôÀ̰í Ŭ·¡½ºÀÇ Á÷°üÀûÀΠȰ¿ë¼ºÀ» Çâ»ó½ÃŰ´Â °ÍÀε¥ ÀÌ·± ½ÄÀ¸·Î ¸Å¹ø &¿¬»êÀÚ¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù¸é Â÷¶ó¸® AddComplex µûÀ§ÀÇ ÀÏ¹Ý ÇÔ¼ö¸¦ ¾²´Â ÆíÀÌ ´õ ³ªÀ» °ÍÀÌ´Ù. ¿¬»êÀÚ ÇÔ¼ö·Î ÇÇ¿¬»êÀÚ¸¦ ³Ñ±â´Â ¹æ¹ýÀº »ç½Ç ¼¼ °¡Áö ¸ðµÎ °¡´ÉÇÏ´Ù. °ªÀ¸·Î ³Ñ±â´Â ¹æ¹ýÀº °´Ã¼°¡ Ä¿Áö¸é È¿À²ÀÌ ÁÁÁö ¸øÇÏ´Ù´Â ¹®Á¦°¡ ÀÖ°í Æ÷ÀÎÅÍ·Î ³Ñ±â´Â ¹æ¹ýÀº È¿À²Àº ÁÁÁö¸¸ È£Ãâ ±¸¹®ÀÌ ¿ä»óÇØÁø´Ù. ·¹ÆÛ·±½º·Î ³Ñ±â¸é È¿À²°ú Á÷°üÀûÀΠǥ±â¶ó´Â µÎ ¸¶¸® Åä³¢¸¦ ´Ù ÀâÀ» ¼ö ÀÖ´Ù. C++ÀÌ ·¹ÆÛ·±½º ŸÀÔÀ» Áö¿øÇÏ´Â ÁÖµÈ ÀÌÀ¯ ÁßÀÇ Çϳª°¡ ¹Ù·Î °´Ã¼ ¿¬»ê½ÄÀÇ Á÷°üÀûÀΠǥÇöÀ» À§ÇؼÀÌ´Ù.
ÇÇ¿¬»êÀÚ·Î Àü´ÞµÈ Àμö´Â º¸Åë Àб⸸ ÇÑ´Ù. a+b, a*b, a>>b, a[b], a->b µî ¿ì¸®°¡ ¾Ë°í ÀÖ´Â ¸ðµç ÀÌÇ× ¿¬»êÀÚ¸¦ °üÂûÇØ º¸¸é Àμö·Î Àü´ÞµÇ´Â ¿ìº¯ÀÇ °ªÀ» º¯°æÇÏ´Â °æ¿ì´Â ÀüÇô ¾øÀ¸¸ç ´ÜÁö ¿¬»êÇÒ °ªÀ» ¾ò±â À§ÇØ Àб⸸ ÇÑ´Ù. ±×·¡¼ ¿¬»êÀÚ ÇÔ¼ö·Î Àü´ÞµÇ´Â Àμö´Â Àбâ Àü¿ëÀÇ const ·Î ¹Þ´Â °ÍÀÌ ÁÁ´Ù. ¿¬»êÀÚ ÇÔ¼ö·Î °´Ã¼ÀÇ ·¹ÆÛ·±½º¸¦ Àü´ÞÇÒ ¶§ ÀÌ ÇÔ¼ö°¡ °´Ã¼ÀÇ »óŸ¦ ÇԺηΠº¯°æÇÏÁö ¸øÇϵµ·Ï Çϱâ À§ÇØ const ÁöÁ¤ÀÚ¸¦ ºÙÀÌ´Â °ÍÀÌ ¾ÈÀüÇÏ´Ù.
¸¸¾à ·¹ÆÛ·±½º·Î Àü´ÞµÇ´Â T°¡ const°¡ ¾Æ´Ï¶ó¸é operator + ÇÔ¼ö ³»ºÎ¿¡¼ T.real=12.34; ·Î ½ÇÀμö¸¦ ¸¶À½´ë·Î ¹Ù²ã ¹ö¸± ¼öµµ ÀÖ´Ù. ÀÌÇ× ¿¬»êÀÚÀÇ ÇÇ¿¬»êÀÚ´Â ¿¬»êÀÇ Àç·áÀÏ »ÓÀÌÁö ¿¬»ê ´ë»óÀÌ ¾Æ´Ï¹Ç·Î ÀÌ´Â ºÐ¸íÈ÷ À߸øµÈ ¿¬»êÀÌ´Ù. ¶ÇÇÑ ´ÙÀ½°ú °°Àº ¿¬»ê¹®µµ ºÒ°¡´ÉÇØÁø´Ù.
const Complex C2(1.0, 2.0);
C3=C1+C2;
»ó¼ö °´Ã¼µµ ÇÇ¿¬»êÀÚ·Î »ç¿ëÇÒ ¼ö ÀÖ¾î¾ß Çϴµ¥ Àμö°¡ »ó¼ö°¡ ¾Æ´Ï¶ó¸é ¿¡·¯·Î ó¸®µÉ °ÍÀÌ´Ù. Á¤¼ö ¿¬»ê¿¡¼ a=b+3;ÀÌ Çã¿ëµÇ¹Ç·Î º¹¼Ò¼ö ¿¬»ê¿¡¼µµ »ó¼ö °´Ã¼¸¦ ÇÇ¿¬»êÀÚ·Î ¾µ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¹°·Ð °Á¦ »çÇ×Àº ¾Æ´Ï¹Ç·Î Çʿ信 µû¶ó ÀμöÀÇ »ó¼ö¼ºÀ» ¼±ÅÃÇÒ ¼ö ÀÖ°ÚÁö¸¸ Á¦´ë·Î µÈ ¿¬»êÀÚ¶ó¸é ÇÇ¿¬»êÀÚ¸¦ º¯°æÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù. Á÷°üÀûÀÎ ¿¬»ê½Ä Ç¥ÇöÀ» À§ÇØ Æ÷ÀÎÅÍ´Â ¾ÈµÈ´Ù°í ÇßÀ¸¹Ç·Î Complex °´Ã¼¸¦ Àμö·Î Àü´Þ¹Þ´Â operator +ÀÇ °æ¿ì ´ÙÀ½ 4°¡Áö Çü½ÄÀÇ Àμö¸¦ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Ù.
¨ç Complex
¨è Complex &
¨é const Complex
¨ê const Complex &
ÀÌ Áß ¨ê¹ø Çü½ÄÀÌ °¡Àå ¹Ù¶÷Á÷ÇÏ´Ù. ·¹ÆÛ·±½º¸¦ ³Ñ±â¹Ç·Î ºü¸£°í const ÁöÁ¤À» ÇßÀ¸¹Ç·Î ¾ÈÀüÇϱ⵵ ÇÏ´Ù. °´Ã¼ÀÇ Å©±â°¡ ¾ÆÁÖ ÀÛ¾Æ ±»ÀÌ ·¹ÆÛ·±½º¸¦ ¾µ Çʿ䰡 ¾ø´Ù¸é ¨ç¹ø Çü½ÄÀÌ °¡Àå °£´ÜÇÏ´Ù. °ªÀ¸·Î ³Ñ±æ °æ¿ì´Â ¾îÂ÷ÇÇ »çº»ÀÌ Àü´ÞµÇ¹Ç·Î ¨é¹ø Çü½Äó·³ °ª¿¡ ´ëÇØ const ÁöÁ¤ÀÚ¸¦ ºÙÀÌ´Â °ÍÀº »ç½Ç º° ½Ç¿ë¼ºÀÌ ¾ø´Ù.
ComplexÀÇ operator + ¿¬»êÀÚ°¡ const ÇÔ¼ö·Î ÁöÁ¤µÇ¾î Àִµ¥ ¸â¹ö ¿¬»êÀÚ ÇÔ¼ö°¡ È£Ãâ °´Ã¼ÀÇ »óŸ¦ ¹Ù²ÙÁö ¾ÊÀ» °æ¿ì´Â ¿øÄ¢¿¡ µû¶ó const ÇÔ¼ö·Î ÁöÁ¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ±×·¡¾ß ÇÔ¼ö ³»ºÎ¿¡¼ ºÎÁÖÀÇÇÏ°Ô È£Ãâ °´Ã¼¸¦ º¯°æÇÏ´Â »ç°í¸¦ ¹æÁöÇÒ ¼ö ÀÖ´Ù. µ¡¼À, »¬¼À, °ö¼À µîÀÇ Åë»óÀûÀÎ ÀÌÇ× ¿¬»êÀÚµéÀº °´Ã¼ÀÇ °ªÀ» Àб⸸ ÇÒ »Ó °´Ã¼¸¦ º¯°æÇÏÁö ¾Ê´Â´Ù. ¸¸¾à ¿¬»êÀÚ ÇÔ¼ö°¡ »ó¼ö¼ºÀ» °¡ÁöÁö ¾ÊÀ¸¸é »ó¼ö °´Ã¼¿¡ ´ëÇØ¼´Â ¿¬»êÀ» ÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù. ´ÙÀ½ Äڵ带 º¸ÀÚ.
const int i=4;
int j=3,k;
k=i+j;
ÀÌ ¿¬»êÀÌ °¡´ÉÇϱâ À§Çؼ´Â +¿¬»êÀÚ°¡ »ó¼ö iÀÇ °ªÀ» ¹Ù²ÙÁö ¾Ê´Â´Ù´Â º¸ÀåÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ¹Ý¸é °´Ã¼ÀÇ °ªÀ» Á÷Á¢ º¯°æÇÏ´Â ¿¬»êÀÚ´Â const·Î ÁöÁ¤Çؼ´Â ¾ÈµÈ´Ù. ÀÌ·± ¿¬»êÀÚ¿¡´Â ´ëÇ¥ÀûÀ¸·Î ´ëÀÔ ¿¬»êÀÚ°¡ ÀÖ°í Áõ°¨ ¿¬»êÀÚ, º¹ÇÕ ´ëÀÔ ¿¬»êÀÚµµ const°¡ µÉ ¼ö ¾ø´Â ¿¬»êÀÚÀÌ´Ù. °°Àº ŸÀÔÀÇ ´Ù¸¥ °´Ã¼¸¦ ´ëÀÔ¹Þ¾Æ °´Ã¼ÀÇ °ªÀ» º¯°æÇÏ´Â = ¿¬»êÀÚ°¡ const¶ó¸é ¸»ÀÌ ¾ÈµÈ´Ù.
À§ ¿¹Á¦ÀÇ operator + ¿¬»êÀÚ º»Ã¼¸¦ º¸¸é ComplexÇüÀÇ Àӽà °´Ã¼ RÀ» ¼±¾ðÇϰí È£Ãâ °´Ã¼¿Í ÇÇ¿¬»êÀÚ T¸¦ ´õÇÑ °á°ú¸¦ R¿¡ ÀÛ¼ºÇÑ ÈÄ Àӽà °´Ã¼ RÀ» ¸®ÅÏÇϰí ÀÖ´Ù. ÀÌ ¿¬»ê¿¡ »ç¿ëµÈ Àӽà °´Ã¼ RÀº È£Ãâ °´Ã¼¿Í ÇÇ¿¬»êÀÚÀÇ °ªÀ» º¯°æÇÏÁö ¾Ê°í ¿¬»ê °á°ú¸¦ Àá½Ã ÀúÀåÇϱâ À§ÇÑ ¿ëµµ·Î »ç¿ëµÇ´Â °ÍÀÌ´Ù. ¸¸¾à Àӽà °´Ã¼¸¦ ¾²Áö ¾Ê°í ´ÙÀ½°ú °°ÀÌ ÀÌ ÇÔ¼ö¸¦ ÀÛ¼ºÇß´Ù°í ÇØ º¸ÀÚ.
const Complex operator +(const Complex &T) {
image = image + T.image;
real = real + T.real;
return *this;
}
È£Ãâ °´Ã¼ÀÎ thisÀÇ ¸â¹ö¸¦ Á÷Á¢ º¯°æÇϰí *this ÀÚü¸¦ ¸®ÅÏÇß´Ù. ÀÌ·¸°Ô ¼öÁ¤ÇÑ ÈÄ ÄÄÆÄÀÏÇØ º¸¸é º° ÀÌ»ó¾øÀÌ Àß µ¿ÀÛÇÏ´Â °Íó·³ º¸ÀδÙ. ±×·¯³ª Å×½ºÆ® ÄÚµåÀÇ ³¡¿¡ C1.OutComplex();·Î C1°ªÀ» È®ÀÎÇØ º¸¸é ¿ø·¡ °ªÀÎ 1.1+2.2i¸¦ ±×´ë·Î °¡Áö°í ÀÖÁö ¾ÊÀ¸¸ç C3°ú °°Àº °ªÀÌ µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. + ¿¬»êÀÚÀÇ Áº¯ °´Ã¼°¡ º¯°æµÇ¾î ¹ö¸®¹Ç·Î ÀÚ¼¼È÷ µûÁ® º¸¸é º»·¡ÀÇ + ¿¬»ê°ú´Â ´Ù¸¥ ¿¬»ê(+=)ÀÌ µÇ¾î ¹ö¸°´Ù. ÀÌ »óȲÀ» Á» ´õ ÀÌÇØÇϱ⠽¬¿î Á¤¼öÇü ¿¬»êÀ» ¿¹·Î ¼³¸íÇØ º¸ÀÚ.
int a=1,b=2,c;
c=a+b;
ÀÌ ÄÚµåÀÇ °á°ú c¿¡´Â 3ÀÌ ´ëÀ﵃ °ÍÀ̰í a¿Í b´Â ¿ø·¡ÀÇ °ªÀ» ±×´ë·Î À¯ÁöÇØ¾ß ÇϹǷΠa´Â 1, b´Â 2°¡ µÇ´Â °ÍÀÌ ¿Ç´Ù. a°¡ bÀÇ °ªÀ» ´õÇÑ °ªÀ¸·Î º¯°æµÈ ÈÄ ±× °á°ú°¡ c¿¡ ´ëÀԵǴ °ÍÀÌ ¾Æ´Ï¶ó µÎ ÇÇ¿¬»êÀÚÀÇ °ª¸¸ ÀÐ¾î µ¡¼ÀÀ» ÇÑ ÈÄ ±× °á°ú°ªÀ» c·Î ´ëÀÔÇØ¾ß ÇÑ´Ù. À̶§ÀÇ °á°ú°ªÀ» Àá½Ã °¡Áö±â À§ÇØ Á¤¼öÇü Àӽà º¯¼ö°¡ ÇÊ¿äÇÏ´Ù.
±×·¡¼ ComplexÀÇ operator +µµ ÀÌ ¿ä±¸¿¡ ¸ÂÃß±â À§ÇØ È£Ãâ °´Ã¼¸¦ °Çµå¸®Áö ¸»¾Æ¾ß ÇÏ¸ç µû¶ó¼ ÀÌ ÇÔ¼ö´Â const°¡ µÇ¾î¾ß ÇÏ´Â °ÍÀÌ´Ù. ±×·¯´Ù º¸´Ï ¿¬»ê °á°ú¸¦ ÀúÀåÇÒ Àӽà °´Ã¼°¡ ÇÊ¿äÇϸç ÀÌ ÇÔ¼ö´Â Àӽà °´Ã¼¿¡ ¿¬»êÀ» ÇÑ ÈÄ ±× °´Ã¼¸¦ ¸®ÅÏÇÏ´Â Çü½ÄÀ¸·Î ÀÛ¼ºÇØ¾ß ÇÑ´Ù. È£ÃâÃø¿¡¼´Â ¿¬»ê °á°ú ¸®ÅϵǴ °ªÀ» °°Àº ŸÀÔÀÇ ´Ù¸¥ °´Ã¼¿¡ Áï½Ã ´ëÀÔÇØ¾ß ÇÑ´Ù. ´ëÀÔµÇÁö ¾ÊÀ¸¸é ÀÌ °ªÀº ¹ö·ÁÁø´Ù.
¿¬»êÀÇ °á°ú·Î ¾î¶² ŸÀÔÀ» ¸®ÅÏÇÒ °ÍÀΰ¡´Â ¿¬»êÀÚº°·Î ´Ù¸£´Ù. Á¤¼ö³¢¸® ´õÇϸé Á¤¼ö°¡ µÇ°í ½Ç¼ö³¢¸® °öÇÏ¸é ½Ç¼ö°¡ µÇ´Â °Íó·³ °´Ã¼¿¡ ´ëÇÑ ¿¬»ê °á°ú´Â º¸Åë °´Ã¼¿Í °°Àº ŸÀÔÀÌ µÇÁö¸¸ ¹Ýµå½Ã ±×·± °ÍÀº ¾Æ´Ï´Ù. ³í¸® ¿¬»êÀÚÀÇ °æ¿ì´Â BOOL(¶Ç´Â bool)ÇüÀ̳ª intÇüÀÌ ¸®Å쵃 ¼öµµ ÀÖ°í ÷ÀÚ ¿¬»êÀÚ [ ]ÀÇ °æ¿ìó·³ Ư¼öÇÑ ¿¬»êÀÚ´Â ¸â¹ö ÁßÀÇ Çϳª¸¦ ¸®ÅÏÇÏ´Â °æ¿ìµµ ÀÖ´Ù.
¾Õ¿¡¼ ¿¹¸¦ µç TimeÀÇ +, ComplexÀÇ +´Â µÑ ´Ù Ŭ·¡½ºÇüÀÇ °´Ã¼¸¦ ¸®ÅÏÇߴµ¥ ±×·¡¾ß ¿¬»ê °á°ú¸¦ Á¦ 3 ÀÇ °´Ã¼¿¡°Ô ´ëÀÔÇÒ ¼ö ÀÖ´Ù. ¸¸¾à + ¿¬»êÀÚ°¡ µ¡¼À¸¸ ÇÏ°í °á°ú¸¦ ¸®ÅÏÇÏÁö ¾Ê´Â´Ù¸é A=B+C°°Àº ´ëÀÔÀº ºÒ°¡´ÉÇÒ °ÍÀ̸ç A=B+C+D °°Àº ¿¬¼âÀû ¿¬»êµµ ÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù. ÀÓÀÇÀÇ Å¸ÀÔ T¿¡ ´ëÇÑ µ¡¼À °á°ú´Â ¿ª½Ã TÇüÀÌ µÇ´Â °ÍÀÌ ÇÕ¸®ÀûÀÌ´Ù.
¿¬»êÀÚ ÇÔ¼ö°¡ °´Ã¼¸¦ ¸®ÅÏÇÒ ¶§ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÒ °ÍÀΰ¡, °ªÀ» ¸®ÅÏÇÒ °ÍÀΰ¡´Â ¿¬»êÀÚ¿¡ µû¶ó ´Ù¸£´Ù. operator +ÀÇ °æ¿ì Àӽà °´Ã¼·Î ¿¬»ê °á°ú¸¦ ¸®ÅÏÇϱ⠶§¹®¿¡ ·¹ÆÛ·±½ºÇüÀº ¾ÈµÈ´Ù. Àӽà °´Ã¼´Â ÇÔ¼ö È£ÃâÀÌ Á¾·áµÇ¸é »ç¶óÁö¸ç ÇÔ¼ö ¸®ÅÏ Á÷ÈÄ¿¡ ´Ù¸¥ °´Ã¼·Î ´ëÀÔÇÒ ¼ö ÀÖ´Â °ªÀ» ³Ñ°Ü¾ß ÇÑ´Ù. Àӽð´Ã¼¿¡ ´ëÇÑ ·¹ÆÛ·±½ºµµ ¹°·Ð °ð¹Ù·Î ´ëÀÔÇÑ´Ù¸é º° ¹®Á¦´Â ¾ø´Ù. ComplexÀÇ + ¿¬»êÀÚ¸¦ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇϵµ·Ï ¼öÁ¤ÇØ º¸ÀÚ.
Complex &operator +(const Complex &T) const {
...
ÀÌ·¸°Ô ¼öÁ¤ÇÑ ÈÄ ÄÄÆÄÀÏÇÏ¸é °æ°í°¡ ¹ß»ýÇϱâ´Â ÇÏÁö¸¸ C3=C1+C2; ¿¬»ê¹®ÀÌ Á¤»óÀûÀ¸·Î ½ÇÇàµÈ´Ù. ¿Ö³ÄÇϸé + ¿¬»ê ¹Ù·Î ´ÙÀ½ ¿¬»êÀÌ ´ëÀÔ ¿¬»êÀÌ°í ´ëÀÔ ¿¬»êÀº ÇÔ¼ö È£ÃâÀÌ ¾Æ´Ñ ¸â¹öº° º¹»ç ÄÚµåÀÇ ½ÇÇàÀ̱⠶§¹®¿¡ ½ºÅÿ¡ ÀÖ´Â Àӽà º¯¼ö°¡ ´ëÀԵǴ ½ÃÁ¡±îÁö °ªÀ» °è¼Ó À¯ÁöÇϱ⠶§¹®ÀÌ´Ù. ±×·¯³ª ´ÙÀ½ Å×½ºÆ® Äڵ带 ÀÛ¼ºÇØ º¸¸é Á¦´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
void main()
{
Complex C1(1.1,2.2);
Complex C2(3.3,4.4);
Complex C3(5.5,6.6);
Complex C4;
C4=C1+C2+C3;
C1.OutComplex();
C2.OutComplex();
C3.OutComplex();
C4.OutComplex();
}
¿¬»ê ¼øÀ§¿¡ µû¶ó C1+C2°¡ ¸ÕÀú È£ÃâµÇ°í ÀÌ ¿¬»êÀÇ °á°ú Áö¿ªº¯¼ö RÀÇ ·¹ÆÛ·±½º°¡ ¸®ÅÏµÇ¸ç ´ÙÀ½À¸·Î ¿¬»ê°á°ú R+C3°¡ È£ÃâµÇ´Âµ¥ ÀÌ ½ÃÁ¡¿¡¼ ½ºÅÿ¡ Àִ ȣÃâ °´Ã¼ÀÎ RÀÌ ±úÁö±â ¶§¹®ÀÌ´Ù. ±×·¯¹Ç·Î C4´Â Á¦´ë·Î µÈ °ªÀ» ´ëÀÔ¹ÞÀ» ¼ö ¾ø´Ù. ¿¬¼âÀûÀÎ ¿¬»êÀÌ ¾Æ´Ñ C3=C1+C2 °°Àº ´ëÀÔ¹®µµ = ¿¬»êÀÚ°¡ º°µµÀÇ ÇÔ¼ö·Î ¿À¹ö·ÎµùµÈ µÈ °æ¿ì ¸¶Âù°¡Áö Çö»óÀÌ ¹ß»ýÇÑ´Ù. ¹Ù·Î Á÷ÀüÀÇ ÇÔ¼ö°¡ ¸¸µç Áö¿ªº¯¼ö´Â ´ÙÀ½ ÇÔ¼ö°¡ È£ÃâµÇ¸é ¿ÏÀüÈ÷ »ç¶óÁø´Ù. ½ºÅÃÀº ¸Å ÇÔ¼ö È£Ã⸶´Ù »õ·Î À籸¼ºµÇ´Â Àӽà ±â¾ï Àå¼ÒÀ̱⠶§¹®ÀÌ´Ù.
¹Ý¸é °ªÀ¸·Î ¸®ÅÏÇÒ °æ¿ì´Â ¾Æ¹«·± ¹®Á¦°¡ ¾ø´Ù. °ªÀº ¸®Å쵃 ¶§ »õ·Î ¸¸µé¾îÁö´Â »çº»À̱⠶§¹®¿¡ ´Ù¸¥ ÇÔ¼ö È£Ãâ¿¡ ´ëÇØ ħ¹ü´çÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ±×·¡¼ ComplexÀÇ + ¿¬»êÀÚ´Â ComplexÀÇ ·¹ÆÛ·±½º°¡ ¾Æ´Ñ ComplexÀÇ °ªÀ» ¸®ÅÏÇÏ´Â °ÍÀÌ Á¤È®ÇÏ´Ù.
¸®ÅÏ Å¸ÀÔÀÇ »ó¼ö¼ºµµ °æ¿ì¿¡ µû¶ó ´Ù¸¥µ¥ °´Ã¼ ŸÀÔÀ» ¸®ÅÏÇÏ´Â ÇÔ¼ö´Â º¸Åë »ó¼ö °´Ã¼¸¦ ¸®ÅÏÇØ¾ß ÇÑ´Ù. TimeÀ̳ª Complex´Â ¿¬»êÀ» À§ÇØ Àӽà °´Ã¼¸¦ »ý¼ºÇÏ°í ¿¬»ê °á°úÀÎ Àӽà °´Ã¼¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ Àӽà °´Ã¼´Â °ªÀ» ¸®ÅÏÇϱâ À§ÇØ Àá½Ã »ý¼ºµÇ´Â °ÍÀ̹ǷΠ»ó¼ö¼ºÀ» °¡Áö´Â °ÍÀÌ ¿Ç´Ù. Àß ÀÌÇØ°¡ µÇÁö ¾ÊÀ¸¸é Á¤¼ö ¿¬»êÀ» ¿¹·Î µé¾î º¸ÀÚ.
int i=3,j=4,k;
k=i+j;
ÀÌ ¿¬»ê¿¡¼ i+jÀÇ °á°ú·Î ¸®ÅϵǴ °ªÀº 7À̶ó´Â Á¤¼ö »ó¼öÀÌÁö Á¤¼öÇü º¯¼ö°¡ ¾Æ´Ï´Ù. Áï ¿ìº¯°ªÀ̾î¾ßÁö Áº¯°ªÀ̾ ¾ÈµÈ´Ù. ¸¸¾à i+j°¡ °ªÀ» º¯°æÇÒ ¼ö ÀÖ´Â Á¤¼öÇü º¯¼ö¸¦ ¸®ÅÏÇÑ´Ù¸é i+j=5;¶ó´Â ¿¬»ê½Äµµ Çã¿ëµÇ¾î¾ß ÇÒ °ÍÀÌ´Ù. ComplexÀÇ °æ¿ì C1+C2´Â µ¡¼ÀÀ» ÇÑ º¹¼Ò¼ö °´Ã¼ÀÏ »Ó ¿©±â¿¡ ¾î¶² º¯°æÀ» °¡ÇÒ ¼ö´Â ¾ø¾î¾ß ÇÏ¸ç ¸¸¾à À̸¦ Çã¿ëÇϸé Àá½Ã ÈÄ¸é »ç¶óÁú Àӽà °´Ã¼¸¦ º¯°æÇÏ´Â ¾µµ¥¾ø´Â ÁþÀ» ÇÏ°Ô µÈ´Ù. ÀÌ ÇÔ¼öÀÇ ¿øÇüÀ» º¸¸é const°¡ ¼¼ ¹ø »ç¿ëµÇ´Âµ¥ °¢°¢ÀÇ Àǹ̴ ´Ù¸£´Ù.

Àбâ Àü¿ë ÇÇ¿¬»êÀÚ¸¦ ¹Þ°í °´Ã¼¸¦ º¯°æÇÏÁö ¾ÊÀ¸¸ç ¸®ÅϵǴ °´Ã¼µµ Àб⸸ ÇÒ ¼ö ÀÖ´Ù. µ¡¼À ¿¬»êÀº ¸ðµç ´ë»óÀ» »ó¼ö·Î¸¸ Ãë±ÞÇÑ´Ù.
Complex Ŭ·¡½º´Â ½Ç¼öºÎ r°ú Çã¼öºÎ i¸¦ Àμö·Î Àü´Þ¹Þ´Â »ý¼ºÀÚ°¡ Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î À̸¦ Ȱ¿ëÇÏ¿© »ý¼ºÀڷκÎÅÍ Àӽð´Ã¼¸¦ ½±°Ô ¸¸µé ¼ö ÀÖ´Ù. operator + ¿¬»êÀÚÀÇ º»Ã¼¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ º¸ÀÚ.
const Complex operator +(const Complex &T) const {
Complex R(real+T.real, image+T.image);
return R;
}
Àӽà °´Ã¼ RÀ» ¸¸µé ¶§ »ý¼ºÀÚ·Î ½Ç¼öºÎ¿Í Çã¼öºÎÀÇ ¿¬»ê½ÄÀ» ³Ñ±â¸é µÈ´Ù. »ý¼ºÀÚÀÇ Àμö·Î Àü´ÞµÇ±â Àü¿¡ ´ëÀÀµÇ´Â ¸â¹ö³¢¸® ¿¬»êÀÌ ¼öÇàµÇ°í ±× °á°ú°¡ »õ·Î »ý¼ºµÇ´Â °´Ã¼ÀÇ ¸â¹ö·Î ´ëÀԵȴÙ. ¶Ç´Â ¾Æ¿¹ Àӽà °´Ã¼¸¦ ¸¸µéÁö ¾Ê°í »ý¼ºÀÚ°¡ ¸®ÅÏÇÏ´Â À̸§¾ø´Â Àӽà °´Ã¼¸¦ °ð¹Ù·Î ¸®ÅÏÇÒ ¼öµµ ÀÖ´Ù.
const Complex operator +(const Complex &T) const {
return Complex(real+T.real, image+T.image);
}
ÀÌ ÄÚµå´Â ¾Õ¼ ¸¸µç Äڵ庸´Ù ÈξÀ ´õ ª°í °£·«ÇØ º¸ÀÏ »Ó¸¸ ¾Æ´Ï¶ó ÄÄÆÄÀÏ·¯ÀÇ ¸®Åϰª ÃÖÀûÈ(RVO:Retrun Value Optimization) ±â´ÉÀÇ µµ¿òµµ ¹ÞÀ» ¼ö ÀÖ¾î ÈξÀ ´õ À¯¸®ÇÏ´Ù. Á¦´ë·Î ¸¸µç ÄÄÆÄÀÏ·¯´Â È£Ãâ¿øÀÇ ´ëÀԵǴ Áº¯¿¡ ´ëÇØ °ð¹Ù·Î »ý¼ºÀÚ¸¦ È£ÃâÇÏ¸ç ºÒÇÊ¿äÇÑ Àӽà °´Ã¼¸¦ ¸¸µéÁö ¾ÊÀ½À¸·Î½á ÈξÀ ´õ ÀÛ°í ºü¸¥ Äڵ带 »ý¼ºÇÑ´Ù.
Àӽà °´Ã¼¸¦ ¸í½ÃÀûÀ¸·Î ¼±¾ðÇÏµç ¾Æ´Ï¸é »ý¼ºÀÚ°¡ ¸®ÅÏÇÏ´Â Àӽà °´Ã¼¸¦ ¸®ÅÏÇÏµç ¾î·µç ¸®ÅϵǴ °á°ú´Â ÀÓ½ÃÀûÀÎ °´Ã¼À̹ǷΠÇÔ¼ö È£ÃâÀÌ ¿Ï·áµÇ¸é »ç¶óÁø´Ù. ±×·¡¼ È£Ãâ¿ø¿¡¼´Â C3=C1+C2;ó·³ ¸®ÅϵǴ Àӽà °´Ã¼¸¦ °ð¹Ù·Î ´Ù¸¥ °´Ã¼¿¡ ´ëÀÔÇØ¾ß ÇÑ´Ù. ¸¸¾à C1+C2; ¿¬»ê¹®À¸·Î ´õÇϱ⸸ ÇÏ°í ´ëÀÔÀ» ¹ÞÁö ¾ÊÀ¸¸é ¸®ÅϵǴ Àӽà °´Ã¼´Â ¹ö·ÁÁø´Ù. ÀÌ Á¡µµ Á¤¼öÇüÀÇ ¿¬»ê°ú µ¿ÀÏÇÏ´Ù.
¿¬»êÀÚ ÇÔ¼öÀÇ º»Ã¼¿¡´Â ¿¬»êÀÚ¿¡ ¿ä±¸µÇ´Â ³í¸®ÀûÀÎ ¿¬»ê Äڵ带 ÀÛ¼ºÇÑ´Ù. ½ÇÁ¦ ¿¬»ê ÄÚµå´Â Ŭ·¡½º¸¶´Ù, ¿¬»êÀÚ¸¶´Ù õÂ÷¸¸º°·Î ´Þ¶óÁú °ÍÀÌ´Ù. º¹¼Ò¼ö ¿¬»êÀÇ °æ¿ì ½Ç¼öºÎ¿Í Çã¼öºÎ¸¦ µû·Î ¿¬»êÇÏ¸ç ½Ã°£Àº ½ÃºÐÃÊ ¿ä¼Ò³¢¸® ¿¬»êÇ쵂 ÀÚ¸® ¿Ã¸²À̳ª ³»¸²À» ó¸®ÇØ¾ß ÇÑ´Ù. ¹®ÀÚ¿³¢¸® ´õÇÒ ¶§´Â ¹öÆÛ¸¦ ÀçÇÒ´çÇÏ¿© ¿¬°áÇØ¾ß ÇÒ °ÍÀ̸ç Çà·ÄÀÇ °æ¿ì ¼öÇÐÀû Á¤ÀÇ¿¡ µû¶ó Çà·Ä ¿¬»êÀ» ÇØ¾ß ÇÒ °ÍÀÌ´Ù.
ÀÌó·³ Ŭ·¡½º°¡ Ç¥ÇöÇÏ´Â ´ë»ó¿¡ µû¶ó ¿¬»êÇÏ´Â ¹æ¹ýÀÌ °íÀ¯ÇÏ°í Æ¯¼öÇϱ⠶§¹®¿¡ Ŭ·¡½º¸¦ ¸¸µç »ç¶÷ÀÌ ¿¬»ê ¹æ¹ý ÀÚü¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ¾î¾ß Çϸç ÀÌ·± Á¤ÀǸ¦ °¡´ÉÇϵµ·Ï ÇÏ´Â C++ÀÇ ¹®¹ýÀûÀÎ ÀåÄ¡°¡ ¹Ù·Î ¿¬»êÀÚ ¿À¹ö·ÎµùÀÎ °ÍÀÌ´Ù. ¸ðµç Ŭ·¡½º¿¡ ´ëÇØ, ¸ðµç ¿¬»êÀÚ¿¡ ´ëÇØ Àý´ëÀûÀ¸·Î Àû¿ëµÇ´Â ¹ýÄ¢ °°Àº °Ç ¾øÀ¸¸ç Ŭ·¡½ºº°·Î ¿¬»êÀÚº°·Î ±ÔÄ¢ÀÌ ´Þ¶óÁø´Ù.
ÀÌ»óÀ¸·Î ¸â¹ö ¿¬»êÀÚ ÇÔ¼ö¸¦ ±¸¼ºÇÏ´Â ¿©·¯ °¡Áö ¿ä¼Ò¿¡ ´ëÇØ »ó¼¼ÇÏ°Ô ¿¬±¸ÇØ ºÃ´Âµ¥ ³ª¸§´ë·Î ÇÕ¸®ÀûÀÎ ±ÔÄ¢µéÀ̱â´Â ÇÏÁö¸¸ º°·Î ½±Áö´Â ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ·± ¿©·¯ °¡Áö º¹ÀâÇÑ ±ÔÄ¢µéÀ» °ñ°í·ç Àû¿ëÇÏ¿© Á¦´ë·Î ¸¸µç µ¡¼À ¿¬»êÀÚ ÇÔ¼öÀÇ ¾Æ¸§´Ù¿î ¸ð½ÀÀ» ´Ù½Ã ÇÑ ¹ø ´õ °¨»óÇØ º¸ÀÚ.
const Complex operator +(const Complex &T) const {
Complex R;
R.image = image + T.image;
R.real = real + T.real;
return R;
}