C++ ¿¡¼­ ¸â¹ö ÇÔ¼öÆ÷ÀÎÅÍ »ç¿ëÇϱâ
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

¿ø¹® : http://www.vmlinux.org/jakov/community.borland.com/15837.html

¼Ò°³

¾Æ¸¶µµ ¿©·¯ºÐÀº ÇÔ¼öÆ÷ÀÎÅ͸¦ »ç¿ëÇØºÃÀ» °ÍÀÌ´Ù. C¿¡¼­ Á¦°øÇÏ´Â qsort(3)¿Í °°Àº ÇÔ¼öµµ ÇÔ¼öÆ÷ÀÎÅ͸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½Àº qsort(3)À» ÀÌ¿ëÇØ¼­ Á¤·ÄÇÏ´Â °£´ÜÇÑ ÇÁ·Î±×·¥ÀÌ´Ù.
#include <unistd.h> 
#include <stdio.h> 
#include <stdlib.h> 
 
int compare(const int *one, const int *two) 
{ 
    if (*one > *two) 
        return  -1; 
    else 
        return 1; 
} 
 
int a[3] = { 50, 10, 20 }; 
int main() 
{ 
    qsort(a, 3, sizeof(a[0]), compare); 
    print("%d\n", a[0]); 
    return 0; 
} 
 
qsort ÇÔ¼ö´Â ÀÎÀÚ·Î, ºñ±³¿¡ »ç¿ëÇÒ ÇÔ¼öÀÇ Æ÷ÀÎÅ͸¦ ¹Þ°í ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ¸¸¾à ÇÔ¼öÆ÷ÀÎÅ͸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é, ºñ±³¿¬»êÀÇ Á¾·ùÀÇ °¹¼ö¸¸Å­ »õ·Î¿î qsortÇÔ¼ö¸¦ ¸¸µé¾î¾ß µÉ °ÍÀÌ´Ù.

À§ ÄÚµå´Â ÀϹÝÀûÀ¸·Î Àß ÄÄÆÄÀÏ µÇÁö¸¸, ÄÄÆÄÀÏ·¯ÀÇ Æ¯¼º¿¡ µû¶ó¼­ °æ°í¸¦ ¹ß»ýÇϰųª ÄÄÆÄÀÏÀÌ ¾ÈµÇ´Â ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. C ÄÄÆÄÀÏ·¯¿¡¼­ ÄÄÆÄÀÏÀ» ÇÑ´Ù¸é °æ°í¸¦ ¹ß»ýÇÒ °ÍÀ̰í, C++ ÄÄÆÄÀÏ·¯¿¡¼­ ÄÄÆÄÀÏ ÇÑ´Ù¸é ¿¡·¯°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù. ÀÌ´Â ÀÌµé µÎ°³ÀÇ ¾ð¾î°¡ °­Å¸ÀÔ¾ð¾îÀ̱⠶§¹®ÀÌ´Ù. C++¿¡¼­ ¿¡·¯°¡ ¹ß»ýÇÏ´Â ÀÌÀ¯´Â ÀϹÝÀûÀ¸·Î C++ÀÌ ´õ¿í °­ÇÏ°Ô Å¸ÀÔÀ» °Ë»çÇϱ⠶§¹®ÀÌ´Ù.

qsort ÇÔ¼ö´Â stdlib.h¿¡ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.
void qsort(void *base, size_t nmemb, size_t size, 
           int(*compar)(const void *, const void *)); 
 

±×·¯¹Ç·Î ŸÀÔÀ» ¸íÈ®È÷ ÇÏ´Â °ÍÀ¸·Î ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù. ÀÌÁ¦ C ÄÄÆÄÀÏ·¯°Ç C++ ÄÄÆÄÀÏ·¯°Ç °£¿¡ °æ°í¸Þ½ÃÁö Çϳª ¾øÀÌ ±ò²ûÇÏ°Ô ÄÄÆÄÀÏ µÉ °ÍÀÌ´Ù.
  qsort(a, 3, sizeof(a[0]), (int (*)(const void *, const void *))compare); 
 


Ŭ·¡½º ¿¡¼­ÀÇ ÇÔ¼ö Æ÷ÀÎÅÍ »ç¿ë

´ÙÀ½Àº C ½ºÅ¸ÀÏÀÇ ÇÔ¼öÆ÷ÀÎÅÍ´Ù.
#include <iostream> 
 
using namespace std; 
void apple(void) 
{ 
  cout << "apple" << endl; 
}; 
 
void berry(void) 
{ 
  cout << "berry" << endl; 
} 
 
int main() 
{ 
  void (*fptr)(void); 
  fptr = apple; 
  fptr(); 
  fptr = berry; 
  fptr(); 
} 
 

À§ÀÇ Äڵ带 C++ ½ºÅ¸ÀÏ·Î ¹Ù²Ù¾î º¸¾Ò´Ù. ÇÔ¼öÆ÷ÀÎÅ͸¦ ÀÌ¿ëÇØ¼­ ¸â¹öº¯¼ö¿¡ Á¢±ÙÇÔÀ» ¾Ë ¼ö ÀÖ´Ù.
#include <iostream> 
 
using namespace std; 
 
class fruit 
{ 
    public: 
        void apple() 
        { 
            cout << "apple" << endl; 
        } 
        void berry() 
        { 
            cout << "berry" << endl; 
        } 
}; 
 
int main() 
{ 
    fruit x, *y; 
    void (fruit::*f)(void); 
     
    y = new fruit; 
    f = &fruit::apple; 
    (x.*f)(); 
 
    f = &fruit::berry; 
    (y->*f)(); 
 
    delete y; 
} 
 
 
C++¿¡¼­ÀÇ ¸â¹öÆ÷ÀÎÅ͸¦ À§ÇÑ ¿¬»êÀÚ¸¦ µû·Î Á¦°øÇÏ´Ù. '.*'À» »ç¿ëÇØ¼­ ¸â¹öÇÔ¼ö¸¦ Æ÷ÀÎÆÃÇÒ ¼ö ÀÖ´Ù. È£ÃâÀº '->*'¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù.

ÀÌÁ¦ qsort() ÇÔ¼ö¿¡ Á¤·Ä¿¬»êÀ» À§Çؼ­ ¸â¹öÇÔ¼ö Æ÷ÀÎÅ͸¦ ³Ñ°Üº¸µµ·Ï ÇÏÀÚ.
#include <stdlib.h> 
#include <iostream> 
 
using namespace std; 
class fruit 
{ 
public: 
    fruit() { f = &fruit::compare; } 
    int (fruit::*f)(const int*, const int*); 
    int compare(const int *one, const int *two) 
    { 
       return ( (*one == *two) ? 0 : *one > *two ); 
    } 
} apple; 
 
int funcptr(const void* one , const void* two) 
{ 
   return ( (apple.*apple.f)( (const int *)one, (const int *)two ) ); 
}; 
 
int a[3] = { 3, 2, 1 }; 
int main() 
{ 
    int i; 
    cout << "before "; 
    for( i=0; i < 3; i++ ) cout << a[i] << "  "; 
    cout << endl; 
    qsort(a, 3, sizeof(a[0]), funcptr ); 
    cout << "after "; 
    for( i=0; i < 3; i++ ) cout << a[i] << "  "; 
    cout << endl; 
    return 0; 
} 
 

friend¿Í static ¿¡¼­ÀÇ ÇÔ¼öÆ÷ÀÎÅÍ »ç¿ë

ÀÌÁ¦ friend¿Í static ¸â¹öÇÔ¼ö¿¡ Á¢±ÙÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸ÀÚ. ´ÙÀ½Àº friend ÇÔ¼ö¿¡ Á¢±ÙÇÏ´Â ¹æ¹ýÀÌ´Ù.
#include <iostream> 
 
using namespace std; 
 
class fruit 
{ 
    public: 
        void apple() 
        { 
            cout << "apple" << endl; 
        } 
        void berry() 
        { 
            cout << "berry" << endl; 
        } 
        friend void cherry(void (fruit::*func)(), fruit x) 
        { 
            (x.*func)(); 
        } 
}; 
 
int main() 
{ 
    fruit x; 
    void (fruit::*f)(void); 
    f = &fruit::apple; 
    (x.*f)(); 
 
    f = &fruit::berry; 
    cherry(f,x); 
} 
 

´ÙÀ½Àº static ¸â¹öÇÔ¼ö¿¡ Á¢±ÙÇÏ´Â ¹æ¹ýÀÌ´Ù.
#include <iostream> 
 
using namespace std; 
 
class fruit 
{ 
    public : 
        void apple() 
        { 
            cout << "apple" << endl; 
        } 
        void berry() 
        { 
            cout << "berry" << endl; 
        } 
        static void cherry(void(fruit::*func)(), fruit x) 
        { 
            (x.*func)(); 
        } 
}; 
 
int main() 
{ 
    fruit x; 
    void (fruit::*f)(void); 
    f= &fruit::apple; 
    (x.*f)(); 
 
    f = &fruit::berry; 
    x.cherry(f,x); 
    return 0; 
} 
 

Ŭ·¡½º¿¡ ÀÓº£µðµåµÈ ÇÔ¼öÆ÷ÀÎÅ͸¦ È£ÃâÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸°Ú½À´Ï´Ù. ¾à°£´õ º¹ÀâÇÕ´Ï´Ù.
#include <iostream> 
 
using namespace std; 
 
class fruit 
{ 
  public: 
    void (fruit::*ff)(void); 
    void apple() 
    { 
      cout << "apple" << endl; 
    } 
    void berry() 
    { 
      cout << "berry" << endl; 
    } 
}; 
 
int main() 
{ 
  fruit x; 
  void (fruit::*f)(void); 
  f = &fruit::apple; 
  x.ff = &fruit::berry; 
  (x.*f)(); 
  (x.*x.ff)(); 
  return 0; 
} 
 

ÅÛÇø´¿¡¼­ÀÇ ÇÔ¼ö Æ÷ÀÎÅÍ »ç¿ë

¸¶Áö¸·À¸·Î ÅÛÇø´¿¡¼­ ÇÔ¼öÆ÷ÀÎÅ͸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.
#include <iostream> 
 
using namespace std; 
template<class T> 
class alpha 
{ 
    T data;     
    public : 
        alpha(T x) {data = x;} 
        T show() {cout << data << endl;} 
}; 
 
int main() 
{ 
    int (alpha<int>::*ifunc)(); 
    float (alpha<float>::*ffunc)(); 
    alpha<int> a(123); 
    alpha<float> b(456.78); 
 
    ifunc = a<int>::show; 
    ffunc = a<float>::show; 
 
    (a.*ifunc)(); 
    (b.*ffunc)(); 
 
} 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.