Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
CµÄÃæÏò¶ÔÏó±à³Ì
 
×÷Õߣºwangzz À´Ô´£ºCSDN ·¢²¼ÓÚ£º2015-10-20
  2457  次浏览      27
 

CÓïÑÔ²¢²»Ö§³ÖÀàÕâÑùµÄ¸ÅÄµ«ÊÇCÈԾɿÉÒÔʹÓÃÃæÏò¶ÔÏóµÄ¸ÅÄî¡£

C++ÖеÄÀ࣬¹Ø¼üÔÚÓÚËüµÄÐ麯Êý±í¡£Òò´Ë£¬ÎÒÃÇҪģÄâÒ»¸öÄܹ»Ö§³ÖÐ麯Êý±íµÄÀà¡£

ʹÓÃCµÄstruct½á¹¹£¬¿ÉÒÔÄ£ÄâÀàºÍÐ麯Êý¡£

±ÈÈ磬ÎÒÃÇÀ´Ä£ÄâÒ»¸öshapeÀà

//Ä£ÄâÐ麯Êý±í  
typedef struct _Shape Shape;

struct ShapeClass {
void (*construct)(Shape* self);
void (*destroy)(Shape *self);
void (*draw)(Shape *self);
};

struct _Shape {
ShapeClass *klass; //¶¨ÒåclassµÄÖ¸Õë
int x, y, width, height;
};

ShapeClass ¶¨ÒåÁËShapeÀàµÄÐ麯Êý±í£¬ÆäÖÐconstructºÍdestroy·Ö±ðÄ£Äâ¹¹ÔìºÍÎö¹¹º¯Êý£¬drawÔòÊÇÒ»¸öÐ麯Êý¡£ShapeÄ£ÄâÊý¾Ý³ÉÔ±¡£ShapeÖеÄShapeClass½«¹ØÁªµ½¾ßÌåµÄʵÏÖÉÏ¡£

Shape¶ÔÏóÒªÄܹ»Ê¹Ó㬻¹±ØÐë×öµ½ÒÔϼ¸µã

ʵÏÖÒ»¸öShapeClassÀà

³õʼ»¯ShapeΪÕýÈ·µÄÀà

Ê×ÏÈ£¬ÎÒÃÇҪʵÏÖShapeClass¶¨ÒåµÄ¸÷¸ö³ÉÔ±º¯ÊýÖ¸Õë

void Shape_construct(Shape* self) {  
self->x = 0;
self->y = 0;
self->width = 100;
self->height = 100;
}

void Shape_destroy(Shape* self)
{
//TODO delete datas
}

void Shape_draw(Shape* self)
{
//TODO draw ....
}

ShapeClass _shape_class = {
Shape_construct,
Shape_destroy,
Shape_draw,
};

Shape *newShape()
{
Shape *shape = (Shape*)malloc(sizeof(Shape);
shape->klass = &_shape_class;
shape->klass->construct(shape);
return shape;
}

void deleteShape(Shape* shape)
{
shape->klass->destroy(shape);
free(shape);
}

µ±ÎÒÃǵ÷ÓÃshapeµÄdrawº¯Êýʱ£¬Ó¦¸Ã

Shape *shape = newShape();  
....
shape->klass->draw(shape);
....
deleteShape(shape);

ÉÏÃæµÄÔ­ÀíÈÝÒ×Àí½â£¬µ«ÊÇ£¬±àдÆð´úÂëÀ´£¬×Åʵ·±ËöÇÒÒ×´í, ¶øÇÒ£¬construct, destoryÕâÀà·½·¨¶¼ÊǶÔÏó×î»ù±¾µÄ·½·¨£¬Òò´Ë£¬ÎÒÃdzéÏó³öÒ»¸öObjectÀàÀ´

#define ClassType(className)    className##Class  
#define Class(className) g_st##className##Cls

typedef struct _mObjectClass mObjectClass;
typedef struct _mObject mObject;

typedef mObjectClass* (*PClassConstructor)(mObjectClass *);

#define mObjectClassHeader(clss, superCls) \
PClassConstructor classConstructor; \
ClassType(superCls) * super; \
const char* typeName; /* */ \
unsigned int objSize; \
/* class virtual function */ \
void (*construct)(clss *self, DWORD addData); \
void (*destroy)(clss *self); \
DWORD (*hash)(clss *self); \
const char* (*toString)(clss *self, char* str, int max);

struct _mObjectClass {
mObjectClassHeader(mObject, mObject)
};

extern mObjectClass g_stmObjectCls; //Class(mObject);


#define mObjectHeader(clss) \
ClassType(clss) * _class;

struct _mObject {
mObjectHeader(mObject)
};

mObjectºÍmObjectClassÊÇËùÓÐÀàµÄ»ù´¡Àà¡£

ÕâÀÎÒÃÇʹÓÃÁËÒ»¸ö¼¼ÇÉ£¬¼°Í¨¹ý¶¨ÒåmObjectClassHeaderºÍmObjectHeaderÁ½¸öºê£¬ÈÃObjectµÄ¼Ì³ÐÀàÄܹ»¡°¼Ì³Ð¡±ObjectµÄ¶¨Òå¡£ÕâÒ»µãÔÚºóÎĽ²Êö¡£
mObjectµÄ¶¨ÒåºÜ¼òµ¥µÄ£¬¾Í¶¨ÒåÁËÒ»¸ömObjectClass *_classÀà(mObjectHeaderºêµÄÕ¹¿ª)¡£

mObjectClassµÄ¶¨Ò壬ÉÔ΢¸´ÔÓһЩ£¬Ã¿¸ö³ÉÔ±ÃèÊöÈçÏ£º

classConstructor : ÕâÊÇÀà±¾ÉíµÄ³õʼ»¯¡£ËûµÄ×÷ÓÃÊÇ£¬½«ÀàµÄÐ麯Êý±íÌî³äÍêÕû¡£Ö®ËùÒÔÓÃÒ»¸öº¯ÊýÀ´Ìî³äÐ麯Êý±í£¬ÊÇΪÁËÄܹ»ÈÃÅÉÉúÀàºÍ»ùÀàµÄÀàÀàÐͶ¼Äܹ»µÃµ½ÕýÈ·µÄ³õʼ»¯¡£

super : ÕâÊdz¬À࣬ÊÇΪ¼Ì³Ð×ö×¼±¸µÄ

typeName: ´æ´¢ÀàµÄÃû³Æ

objSize: ¶¨ÒåÁËÀà±¾ÉíµÄ´óС£¬ÕâÑùÔÚmallocµÄʱºò£¬²»ÐèÒªÖªµÀ¾ßÌåµÄÀàÀàÐÍ£¬¾Í¿ÉÒÔ·ÖÅä×ã¹»µÄ¿Õ¼ä

construct, destory: ¹¹ÔìºÍÎö¹¹

hash: hashº¯Êý£¬ÓÃÔÚhash±íÖÐ

toString:µ÷ÊÔʱÉú³ÉÃèÊöÐÅÏ¢

ÎÒÃÇͨ¹ýexternÉùÃ÷ÁËg_stmObjectCls±äÁ¿¡£Õâ¸ö±äÁ¿ÊÇmObjectClassµÄ±äÁ¿£¬°üº¬µÄ¶¼ÊÇÀàµÄÐ麯Êý±íºÍ×î»ù±¾µÄÐÅÏ¢¡£µ±ÎÒÃÇ´´½¨ÀàµÄʱºò£¬¾ÍÐèÒªÕâ¸öº¯ÊýÁË¡£

ÏÂÃæ¿´¿´newºÍdeleteº¯ÊýµÄʵÏÖ

mObject * newObject(mObjectClass *_class)  
{
mObject * obj;

if(_class == NULL)
return NULL;

obj = (mObject*)calloc(1, _class->objSize);

if(!obj)
return NULL;

obj->_class = _class;

return obj;
}

void deleteObject(mObject *obj)
{
if(obj == NULL || obj->_class)
return;

_c(obj)->destroy(obj);

free(obj);
}
......
static inline mObject * ncsNewObject(mObjectClass *_class,DWORD add_data){
mObject * obj = newObject(_class);
if(!obj)
<span style="white-space:pre"> </span>return NULL;


_class->construct(obj, add_data);
return obj;
}

newObject¸ºÔð¶Ô¶ÔÏó×ö×î»ù±¾µÄ³õʼ»¯: µ÷ÓÃcalloc·ÖÅä¿Õ¼ä£¬È»ºó½«_class¸³¸ø¶ÔÏó¡£¶øncsNewObjectº¯Êý£¬Ôòµ÷ÓÃÁËconstructº¯Êý£¬Íê³É¶ÔÏóµÄ³õʼ»¯¡£

ÄÇô£¬g_stmObjectClsÊÇÈçºÎÉùÃ÷ºÍ³õʼ»¯µÄ£¿Çë¿´´úÂë

static void mObject_construct(mObject* self, DWORD addData)  
{
//do nothing
//to avoid NULL pointer
}

static void mObject_destroy(mObject* self)
{

}

static DWORD mObject_hash(mObject *self)
{
return (DWORD)self;
}

static const char* mObject_toString(mObject *self, char* str, int max)
{
if(!str)
return NULL;

snprintf(str, max, "NCS %s[@%p]", TYPENAME(self),self);
return str;
}

static mObjectClass* mObjectClassConstructor(mObjectClass* _class)
{
_class->super = NULL;
_class->typeName = "mObject";
_class->objSize = sizeof(mObject);

CLASS_METHOD_MAP(mObject, construct)
CLASS_METHOD_MAP(mObject, destroy)
CLASS_METHOD_MAP(mObject, hash)
CLASS_METHOD_MAP(mObject, toString)
return _class;
}

mObjectClass Class(mObject) = {
(PClassConstructor)mObjectClassConstructor
};

CLASS_METHOD_MAPºêµÄ¶¨ÒåÊÇ

#define CLASS_METHOD_MAP(clss, name) \  
_class->name = (typeof(_class->name))(clss##_##name);

ÕâÀïΪÁË·½±ã£¬ÒªÇóͳһµÄÃüÃû¹æ·¶¡£

×¢Òâµ½mObjectClassConstructor£¬Ëû¾ÍÊÇmObjectClassÖеÄclassConstructorµÄʵÏÖ¡£¿´Ëù×öµÄ¹¤×÷£º

¸ø³öÀàµÄÃû×Ö

¸ø³ö¶ÔÏóµÄ´óС

½«Ð麯Êý±íÌî³äÍêÕû

mObjectÀà±¾ÉíûÓÐÈκÎÓô¦£¬ËûÖ»ÊÇ×÷Ϊ¸ùÀà´æÔÚ¡£ÎÒÃDZØÐ붨ÒåÆäËûÀ࣬²ÅÄÜÆðµ½×÷ÓᣠÄÇô£¬Èç¹ûҪʵÏּ̳У¬Ó¦¸ÃÔõô°ìÄØ£¿

»¹ÒÔShapeΪÀý£¬»ù±¾ÉÏÓ¦¸ÃÊÇÕâÑù

typedef struct _mShape mShape;  
typedef struct _mShapeClass mShapeClass;
struct _mShape {
mObject base;
int x, y, width, height;
};
struct _mShapeClass {
mObjectClass base;
void (*draw)(mShape* self);
};

mShapeºÍmShapeClass¶¼½«mObjectºÍmObjectClass·ÅÔÚ×îÉÏÃæ£¬ÕâÑù£¬C±àÒëÆ÷¾Í»á±£Ö¤mShapeºÍmObjectµÄÄÚ´æ½á¹¹£¬ÔÚǰ°ë²¿·Ö¶¼ÊÇÒ»Öµġ£Òò´Ë£¬µ±ÎÒʹÓà mObject *obj = (mObject*)shapeÕâÑùµÄ´úÂëʱ£¬²»»á·¢ÉúÈκÎÒâÍ⡣ͨ¹ýÕâ¸ö·½·¨£¬¾ÍÄÜʵÏÖC++µÄ¶à̬¡£

µ«£¬ÕâÀïÓÐÁ½¸öÎÊÌ⣺

Èç¹ûÎÒÃÇÏë·ÃÎʸ¸ÀàµÄ·½·¨£¬¾Í±ØÐëͨ¹ý shape->base.XXXÀ´·ÃÎÊ£¬Èç¹û·ÃÎÊ·½·¨£¬¾Í±ØÐëshape->base._class->construct

±ØÐë½øÐÐÇ¿ÖÆ×ª»»£º

Èç¹ûÎÒÃÇ·ÃÎʸ¸ÀàµÄÐ麯Êý£¬Ôò±ØÐë°Ñ×ÓÀàת»»Îª¸¸À࣬Èç shape->base._class->toString((mObject*)shape);

Èç¹ûÎÒÃÇÒª·ÃÎÊ×Ô¼ºµÄÐ麯Êý£¬Ôò±ØÐë°Ñ¸¸ÀàµÄÐ麯Êý±í£¬×ª»»Îª×Ô¼ºµÄ£¬Èç ((mShapeClass*)(shape->base._class))->draw(shape);

Õâ²»½ö½öÊÇд·¨ÉÏ·±ËöÕâô¼òµ¥¡£µ±¼Ì³Ð²ã´ÎºÜ¶àʱ£¬¼ÈҪдһ³¤´®µÄbaseµ÷Ó㬻¹±ØÐë¼Çס¼Ì³ÐµÄ˳ÐòºÍ²ã´Î£¬Õâ»ù±¾ÉÏÊDz»¿ÉÄܵġ£

ÕâÊÇ£¬ÎÒÃÇÐèҪͨ¹ýºê£¬À´ÊµÏÖÉùÃ÷µÄ"¼Ì³Ð"

#define mShapeHeader(Cls) \  
mObjectHeader(Cls) \
int x, y, width, height;

struct _mShape {
mShapeHeader(mShape)
};

#define mShapeClassHeader(Cls, Super) \
mObjectClassHeader(Cls, Super) \
void (*draw)(Cls* self)

struct mShapeClass {
mShapeClassHeader(mShape, mObject)
};

<ClassName>HeaderºÍ<ClassName>ClassHeaderºêºÜºÃµÄ½â¾öÁËÕâ¸öÎÊÌâ¡£mObjectµÄËùÓÐÉùÃ÷¶¼½«ÔÚmShapeºÍmShapeClassÖÐÔÚÉùÃ÷Ò»±é£¬¶øÇÒ£¬ClassµÄÃû×Ö£¬Ò²´ÓmObjectÌæ»»ÎªÁËmShapeÁË¡£ÕâÑùÒ»À´£¬µ±ÎÒÃÇʹÓÃmShapeÀàÐ͵ıäÁ¿Ê±£¬ËùÓеÄÐ麯Êý¶¼¿ÉÒÔ±»Ö±½Óµ÷Ó㬲»ÐèÒªÈκεÄת»»¡£

mShapeºÍmObjectÖ®¼ä£¬ÈԾɱ£³ÖÁËÄÇÖÖÄÚ´æÉϵÄÒ»ÖÂÐÔ¡£

µ±mShape×÷Ϊ»ùÀàʱ£¬ËûµÄÅÉÉúÀà¿ÉÒÔʹÓÃmShapeHeaderºÍmShapeClassHeaderÀ´Éú³ÉеÄÀà¡£

ÏÂÃæ£¬ÎÒÃÇÌÖÂÛÏ£¬mShapeClassµÄ³õʼ»¯ÎÊÌâ¡£

Ð麯Êý±íËäÈ»¶¨ÒåÁ˽ṹ£¬È´Ã»Óж¨Òå±äÁ¿£¬ÐèÒª¶¨Ò壺

extern mShapeClass g_stmShapeCls; 

È»ºó£¬ÔÚÔÙshape.cÖУ¬ÉùÃ÷ºÍÌî³äg_stmShapeCls¡£

g_stmShapeClsµÄʵÏÖºÍg_stmShapeClsÊÇÒ»ÑùµÄ£¬Ò²ÐèÒª¶¨ÒåÒ»¸öclassConstructorº¯Êý£¬È»ºóÔÚÕâ¸öº¯ÊýÖгõʼ»¯ÀàµÄÃû×Ö¡¢mShapeµÄ´óСÒÔ¼°drawº¯ÊýÖ¸ÕëµÄ³õʼ»¯¡£µ«ÊÇ£¬ÕâÑùд·Ç³£·±Ëö£¬Òò´Ë£¬ÎÒÃÇͨ¹ýÒ»¸öºêÀ´¶¨Òå

 #define BEGIN_MINI_CLASS(clss, superCls) \  
1 static ClassType(clss) * clss##ClassConstructor(ClassType(clss)* _class); \
2 ClassType(clss) Class(clss) = { (PClassConstructor)clss##ClassConstructor }; \
3 static const char* clss##_type_name = #clss; \
4 static ClassType(clss) * clss##ClassConstructor(ClassType(clss)* _class) { \
5 _class = (ClassType(clss)*)((PClassConstructor)(Class(superCls).classConstructor))((mObjectClass*)_class); \
6 _class->super = &Class(superCls); \
7 _class->typeName = clss##_type_name; \
8 _class->objSize = sizeof(clss);

#define END_MINI_CLASS return _class; }

#define CLASS_METHOD_MAP(clss, name) \
_class->name = (typeof(_class->name))(clss##_##name);

ÎÒÃǰÑClassConstructorº¯ÊýµÄÉùÃ÷²ð³ÉÁË3²¿·Ö£º³õʼ»¯¶¨Òå¡¢½áÊø¶¨ÒåºÍ·½·¨Ìî³ä¡£Öصã½âÊ͵ÄÊdzõʼ»¯¶¨Ò壺

BEGIN_MINI_CLASS :

ÐÐ1£º ǰÖÃÉùÃ÷ClassConstructorº¯Êý£¬Ê¹ÓÃÀàÃûÒÔÇø·Ö²»Í¬ÀàµÄclassConstructorº¯Êý

ÐÐ2£º ÉùÃ÷ÁËg_stmShapeCls±äÁ¿£¬²¢½«ClassConstructor¸³Öµ¸øËü¡£ÕâÊǷdz£ÖØÒªµÄ£¬Èç¹ûûÓÐÕâÒ»²½Ö裬ÄÇô£¬Ð麯Êý±í¾ÍÎÞ·¨±»³õʼ»¯£»

ÐÐ3£ºÉùÃ÷Ò»¸öÀàµÄÃû×ÖµÄ×Ö·û´®Êý×é

ÐÐ4£º¶¨ÒåÁËClassConstructorº¯ÊýµÄʵÏÖ²¿·Ö

ÐÐ5£ºÊ×Ïȵ÷Óó¬ÀàµÄClassConstructor£¬Èó¬ÀàÏȳõʼ»¯Ò»±é£¬ÕâÑùÈç¹û×ÓÀ಻¸²¸Ç³¬ÀàµÄº¯Êý£¬ÄÇô£¬ÎÒÃǽ«¼ÌÐøÊ¹Óó¬ÀàµÄº¯Êý£¬ÕâÊǶà̬µÄ¡°¼Ì³Ð¡±ÌØÐÔ

ÐÐ6£ºÉèÖó¬ÀàÖ¸Õë

ÐÐ7£ºÉèÖÃÀàÃû

ÐÐ8£ºµÃµ½³ÉÔ±±äÁ¿µÄ´óС

ʹÓõÄʱºò£¬·Ç³£¼òµ¥

BEGIN_MINI_CLASS(mShape, mObject)  
CLASS_METHOD_MAP(mShape, draw)
END_MINI_CLASS

ÕâÑù×ö²»½ö±ÜÃâÁË´óÁ¿×Ö·ûÊäÈ룬¸üÖØÒªµÄÊÇ£º1£©±ÜÃâ´íÎó£»2£©±ÜÃ⿪·¢ÕßѧϰºÍ¼ÇסÕâЩͨÓÃÐÔºÜÇ¿µÄÄÚÈÝ¡£

µ±È»£¬ÕâÖÖÇé¿öÏ£¬À໹ÊDz»ÄÜÖ±½ÓʹÓõģ¬ÒªÊ¹Ó㬱ØÐëµ÷ÓÃÒ»´Îg_stmShapeCls.classConstructorÀà£¬ÕæÕýÍê³ÉÀàµÄ³õʼ»¯¡£ÎªÁ˼ò±ã£¬Ìṩһ¸öºêÀ´¼ò»¯Õâ¸ö¹ý³Ì£º

#define MGNCS_WIDGET_REGISTER(className) \  
Class(className).classConstructor((mObjectClass*)(void*)(&(Class(className))))

ÔÚ³õʼ»¯Ê±

void init()  
{
...
MGNCS_WIDGET_REGISTER(mShape);
...
}

ÓÃCÄ£ÄâÀ࣬»¹Äܹ»µÃµ½C++µÄRTTIµÄһЩЧ¹û£¬ÀýÈ磬ģÄâjavaµÄinstanceof¹Ø¼ü×Ö

BOOL ncsInstanceOf(mObject *object, mObjectClass* clss)  
{
mObjectClass* objClss;
if(object == NULL || clss == NULL)
return FALSE;

objClss = _c(object);

while(objClss && clss != objClss){
objClss = objClss->super;
}

return objClss != NULL;
}
#define INSTANCEOF(obj, clss) ncsInstanceOf((mObject*)(obj), (mObjectClass*)(void*)(&Class(clss)))

ÎÒÃÇ¿ÉÒÔÖ±½ÓÈ¥Åжϣ¬Èç INSTANCEOF(rectange, mShape)¡£Õâ¸öÏûºÄÊǺÜÉٵģ¬ÒòΪ£¬¼Ì³Ð²ã´Î³¬¹ý5²ãµÄÒѾ­·Ç³£ÉÙÁË£¬»ù±¾ÉÏ£¬¼Ì³Ð²ã´ÎÔÚ5²ãÒÔÄÚ¾ÍÄÜ×ö³ö×ã¹»µÄ³éÏó¡£

   
2457 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
Visual C++±à³ÌÃüÃû¹æÔò
ÈκÎʱºò¶¼ÊÊÓõÄ20¸öC++¼¼ÇÉ
CÓïÑÔ½ø½×
´®¿ÚÇý¶¯·ÖÎö
ÇáÇáËÉËÉ´ÓCһ·×ßµ½C++
C++±à³Ì˼Ïë


C++²¢·¢´¦Àí+µ¥Ôª²âÊÔ
C++³ÌÐò¿ª·¢
C++¸ß¼¶±à³Ì
C/C++¿ª·¢
C++Éè¼ÆÄ£Ê½
C/C++µ¥Ôª²âÊÔ


±±¾© ǶÈëʽC¸ßÖÊÁ¿±à³Ì
Öйúº½¿Õ ǶÈëʽC¸ßÖÊÁ¿±à³Ì
»ªÎª C++¸ß¼¶±à³Ì
±±¾© C++¸ß¼¶±à³Ì
µ¤·ð˹ C++¸ß¼¶±à³Ì
±±´ó·½Õý CÓïÑÔµ¥Ôª²âÊÔ
ÂÞ¿ËΤ¶û C++µ¥Ôª²âÊÔ