Áßø Ŭ·¡½º¶õ Ŭ·¡½º ¼±¾ð¹®¾È¿¡ ´Ù¸¥ Ŭ·¡½º°¡ ¼±¾ðµÇ´Â ÇüÅÂÀÌ´Ù. ƯÁ¤ Ŭ·¡½º¸¦ ±¸ÇöÇϱâ À§ÇÑ º¸Á¶ Ŭ·¡½º°¡ ÇÊ¿äÇѵ¥ º¸Á¶ Ŭ·¡½º´Â ¿ÀÁ÷ ÀÌ Å¬·¡½º ³»ºÎ¿¡¼¸¸ »ç¿ëÇÏ¸ç ¿ÜºÎ¿¡´Â ÀüÇô ¾Ë¸± ÇÊ¿ä°¡ ¾ø´Ù¸é À̶§ Ŭ·¡½º¸¦ Áßø½ÃŲ´Ù. Ŭ·¡½º¿¡ ĸ½¶ÈµÇ´Â °ÍÀº ÈçÈ÷ ¸â¹ö º¯¼ö, ¸â¹ö ÇÔ¼ö Á¤µµÀÌÁö¸¸ ŸÀÔµµ Æ÷Ç﵃ ¼ö ÀÖ´Ù. Ŭ·¡½º°¡ ŸÀÔÀ̹ǷΠ´Ù¸¥ Ŭ·¡½º¿¡ Æ÷Ç﵃ ¼ö ÀÖ´Â °ÍÀº ´ç¿¬ÇÏ¸ç ¿°ÅÇüÀ̳ª typedef·Î Á¤ÀÇÇÑ Å¸ÀÔµµ ¹°·Ð °¡´ÉÇÏ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.
¿¹ Á¦ : NestClass |
#include <Turboc.h>
class Outer
{
private:
class Inner
{
private:
int memA;
public:
Inner(int a) : memA(a) { }
int GetA() { return memA; }
} obj;
public:
Outer(int a) : obj(a) { }
void OutOuter() { printf("¸â¹ö°ª = %d\n",obj.GetA()); }
};
void main()
{
Outer O(345);
// Inner I(678); // ¿¡·¯
O.OutOuter();
}
Outer Ŭ·¡½º ¼±¾ð¹®¾È¿¡ Inner Ŭ·¡½º ¼±¾ð¹®ÀÌ ÀÖ°í Inner Ŭ·¡½ºÇüÀÇ °´Ã¼ obj¸¦ ¸â¹ö·Î Æ÷ÇÔÇÏ°í ÀÖ´Ù. Inner Ŭ·¡½º´Â Outer Ŭ·¡½º ³»ºÎ¿¡¼¸¸ »ç¿ëÇϹǷΠ¿ÜºÎ·Î´Â ÀüÇô ¾Ë·ÁÁöÁö ¾Ê´Â´Ù. ±×·¡¼ main¿¡¼´Â Inner ŸÀÔÀÇ °´Ã¼¸¦ ¼±¾ðÇÒ ¼ö ¾ø´Ù. Áï Inner´Â Outer Ŭ·¡½º¿¡ ´ëÇØ Áö¿ªÀûÀΠŬ·¡½º¶ó°í ÇÒ ¼ö ÀÖ´Ù. ¸¸¾à Inner¸¦ ¿ÜºÎ¿¡µµ ¾Ë¸®°í ½Í´Ù¸é public: ¿µ¿ª¿¡¼ ¼±¾ðÇÏ¸é µÈ´Ù. ÀÌ °æ¿ì ¿ÜºÎ¿¡¼´Â Outer::Inner I(1234); ½ÄÀ¸·Î ÀÌ Å¸ÀÔÀÌ ¼Ò¼ÓµÇ¾î Àִ Ŭ·¡½º¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù.
Ŭ·¡½º°¡ ÇÏ´Â ÀÏÀÌ ±²ÀåÈ÷ º¹ÀâÇؼ µµ¿ì¹Ì Ŭ·¡½º¸¦ ¸¸µé¾î¾ß ÇÒ ÇÊ¿ä°¡ Àִٰųª ³»ºÎÀûÀ¸·Î¸¸ »ç¿ëÇؾßÇϴ ŸÀÔÀÌ ÀÖ´Ù¸é ÀÌ·± ½ÄÀ¸·Î Ŭ·¡½º ¼±¾ðÀ» Áßø½ÃŲ´Ù. ´ÙÀ½ Ŭ·¡½º´Â ÀÌÁß ¿¬°á ¸®½ºÆ®¸¦ Ç¥ÇöÇϴµ¥ ¿¬°á ¸®½ºÆ®´Â ÀúÀåµÇ´Â µ¥ÀÌÅÍ¿Í ¾ç¹æÇâÀÇ ¸µÅ©·Î ±¸¼ºµÈ ³ëµåÀÇ ÁýÇÕÀÌ´Ù. ³ëµåµéÀº Ŭ·¡½º ³»ºÎ¿¡¼ ¿Ïº®ÇÏ°Ô °ü¸®ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¿ÜºÎ¿¡¼ ±»ÀÌ ¾Ë ÇÊ¿ä°¡ ¾øÀ¸¹Ç·Î LinkedList Ŭ·¡½º ¾È¿¡ ¼±¾ðÇß´Ù.
class LinkedList
{
private:
struct Node {
int data;
Node *prev,*next;
};
Node *head,*tail;
public:
LinkedList();
~LinkedList();
Insert(Node *p,int a);
Delete(Node *p);
int GetData(Node *p);
};
¿ÜºÎ¿¡¼´Â Insert, Delete µîÀÇ °ø°³µÈ ÀÎÅÍÆäÀ̽º ÇÔ¼ö·Î Á¤¼ö°ªÀ» ³Ö°Å³ª »©±â¸¸ ÇÒ »ÓÀÌ°í ¸ðµç ³»ºÎÀûÀÎ ÀÚ·á °ü¸®´Â Ŭ·¡½º¿¡ ¿Ïº®ÇÏ°Ô Ä¸½¶ÈµÇ¾î ÀÖ´Ù. ¹°·Ð ¿ÜºÎ¿¡¼µµ Node¸¦ ²À ¾Ë¾Æ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù¸é ÀÌ Å¬·¡½º¸¦ ÆÛºí¸¯ ¿µ¿ª¿¡ ¼±¾ðÇÒ ¼öµµ ÀÖ´Ù. Node´Â LinkedList¿¡¼¸¸ ÇÊ¿äÇÏ¸ç ¿ÜºÎ¿¡ µû·Î Á¤ÀÇÇØ ºÁ¾ß ¾Æ¹«Â¦¿¡µµ ¾µ¸ð°¡ ¾øÀ¸¹Ç·Î Áö¿ª ŸÀÔÀÌ µÇ´Â °ÍÀÌ ¿Ç´Ù. LinkedList°¡ Node¸¦ ¿ÏÀüÈ÷ Æ÷ÇÔÇÏ°í ÀÖÀ¸¸é ÀÌ Å¬·¡½º´Â ÀÚüÀûÀ¸·Î µ¿ÀÛÇÒ ¼ö ÀÖ´Â ¸ðµç °ÍÀ» °¡Áö¹Ç·Î Àç»ç¿ë¼º°ú ¹ü¿ë¼ºÀÌ Áõ°¡ÇÑ´Ù.
Ŭ·¡½º ¼±¾ð ÀÚü°¡ Áö¿ªÀûÀ̶ó´Â °Í°ú Ŭ·¡½º°¡ ¸â¹ö ÇÔ¼ö¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù´Â Á¡À» È°¿ëÇϸé C/C++ ¾ð¾î°¡ Áö¿øÇÏÁö ¾Ê´Â Áö¿ª ÇÔ¼ö¸¦ ¸¸µå´Â °Íµµ °¡´ÉÇÏ´Ù. ¿ø·¡ CÀÇ ÇÔ¼ö´Â »óÈ£ ÆòµîÇÑ °ü°è¿¡ ÀÖ¾î ÇÔ¼ö³¢¸® Á¾¼ÓµÇÁö ¾Ê´Â´Ù. ±×·¯³ª Ŭ·¡½º°¡ °³ÀԵǸé ÇÔ¼ö³¢¸® Á¾¼Ó½Ãų ¼öµµ ÀÖ°í ÆĽºÄ®Ã³·³ Áö¿ª ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. C++ÀÌ ¾ð¾î Â÷¿ø¿¡¼ Áö¿ª ÇÔ¼ö¸¦ Áö¿øÇÏ´Â °ÍÀº ¾Æ´ÏÁö¸¸ Áö¿ª ŸÀÔÀ» Çã¿ëÇϸç Ŭ·¡½º¶ó´Â ŸÀÔÀÌ ÇÔ¼ö¸¦ °¡Áú ¼ö ÀÖÀ¸¹Ç·Î Áö¿ª ÇÔ¼ö°¡ °¡´ÉÇØÁø °ÍÀÌ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.
¿¹ Á¦ : LocalFunc |
#include <Turboc.h>
void func()
{
struct dummy {
static void localfunc() {
puts("Àú´Â func ¾È¿¡¼¸¸ Á¤Àǵ˴ϴÙ.");
}
};
dummy::localfunc();
}
void main()
{
func();
// localfunc(); // ¿¡·¯
}
func ÇÔ¼ö ³»ºÎ¿¡¼ dummy¶ó´Â À̸§À¸·Î Áö¿ª Ŭ·¡½º¸¦ ¼±¾ðÇÏ°í ÀÌ Å¬·¡½ºÀÇ Á¤Àû ÇÔ¼ö localfunc¸¦ ÀζóÀÎÀ¸·Î Á¤ÀÇÇÏ°í ÀÖ´Ù. dummy¸¦ struct·Î ¼±¾ðÇߴµ¥ class·Î ¼±¾ðÇÏ°í public:À» ºÙÀÌ´Â °Í°ú °°´Ù. Á¤ÀûÀ¸·Î ¼±¾ðÇßÀ¸¹Ç·Î È£ÃâÇÒ ¶§´Â ¹Ýµå½Ã Ŭ·¡½º À̸§°ú ÇÔ²² »ç¿ëÇØ¾ß ÇÑ´Ù. Áö¿ª Ŭ·¡½ºÀÇ ÇÔ¼ö´Â staticÀ̾î¾ß Çϴµ¥ ±×·¡¾ß °´Ã¼¾øÀÌ Å¬·¡½º¸íÀ¸·Î ¹Ù·Î È£Ãâ °¡´ÉÇÏ´Ù. ¸¸¾à Á¤ÀûÀÌ ¾Æ´Ï¶ó¸é ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϱâ À§ÇØ dummyÇü °´Ã¼¸¦ Çϳª ¼±¾ðÇØ¾ß ÇϹǷΠºÒÆíÇØÁø´Ù.
localfunc´Â func ÇÔ¼ö ³»ºÎ¿¡¼ Á¤ÀÇÇÑ Áö¿ª Ŭ·¡½º ¼Ò¼ÓÀÇ Á¤Àû ¸â¹ö ÇÔ¼öÀ̹ǷΠÀÌ ÇÔ¼ö´Â func ¿ÜºÎ·Î´Â ¾Ë·ÁÁöÁö ¾Ê´Â´Ù. µû¶ó¼ main ÇÔ¼ö¿¡¼´Â ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ¾ø´Ù. »ç½Ç main¿¡°Ô´Â localfunc »Ó¸¸ ¾Æ´Ï¶ó dummy¶ó´Â Áö¿ª Ŭ·¡½º ÀÚü°¡ ¾Ë·ÁÁöÁö ¾Ê´Â´Ù.
ÀÌ ¿¹Á¦´Â C/C++·Îµµ Áö¿ª ÇÔ¼ö¸¦ ¸¸µé ¼ö ÀÖ´Ù´Â °ÍÀ» º¸¿©ÁÙ »Ó ½Ç¿ëÀû °¡Ä¡´Â º°·Î ¾ø´Ù. °Ô´Ù°¡ ÀÌ·¸°Ô ¸¸µç ÇÔ¼ö´Â ÀζóÀθ¸ °¡´ÉÇÏ´Ù´Â Á¡¿¡¼ º¹ÀâÇÑ µ¿ÀÛÀ» ó¸®Çϱ⿡´Â ÇÑ°è°¡ ÀÖ´Ù. ¾ÆÁÖ ±ä ÇÔ¼ö°¡ ¾²´Â ÀÛÀº À¯Æ¿¸®Æ¼ ÇÔ¼ö ÁýÇÕÀ» ÀÌ·± ½ÄÀ¸·Î Á¤ÀÇÇØ ³õÀ¸¸é ¹èÆ÷Çϱâ Æí¸®ÇÏ´Ù´Â Á¤µµÀÇ È°¿ë ¹æ¾ÈÀÌ ÀÖÁö¸¸ ¹®¹ýÀ» º¯Ä¢ÀûÀ¸·Î ¾²¸é ÀÌ·± °Íµµ °¡´ÉÇÏ´Ù´Â Èï¹Ì°Å¸® Á¤µµ¹Û¿¡ ¾ÈµÇ´Â °Í °°´Ù.