易截截图软件、单文件、免安装、纯绿色、仅160KB

C的函数指针实现C++的多态

C的函数指针很强大,用好了才是C语言的高手。像Gtk中的回调函数的使用,都体现了函数指针的强大威力。
struct Point{
int x, y;
};
/*Shape*/
/*----------------------------------------------------------------*/
struct Shape {
struct Methods* methods;
};

struct Methods {//将C++对应类中所有成员函数封装到一个结构体里面
float (*getCircle)(Shape * shape);
float (*getArea)(Shape * shape);
void (*draw)(Shape * shape);
void (*move)(Shape * shape);
};
////////////////C++ Counterpart of above code//////////////////
class Shape {
public:
virtual float getCircle() = 0;
virtual float getArea() = 0;
virtual void draw() = 0;
virtual void move() = 0;
};
///////////////////////////////////////////////////////////////
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/*Rectangle*/
struct Rectangle {
struct Methods * methods; //包含封装后的成员函数结构体的指针
Point leftTop; //Shape之外派生的成员变量
Point rightBottom; //Shape之外派生的成员变量
};
float Rectangle_getCircle(Shape * shape)
{
Rectangle * r = (Rectangle *) shape;
return (r->rightBottom.x - r->leftTop.x +
r->rightBottom.y - r->leftTop.y) * 2;
}
float Rectangle_getArea(Shape * shape){}
void Rectangle_draw (Shape * shape){}
void Rectangle_move(Shape * shape){}
struct Methods rectangleMethods = {
&Rectangle_getCircle,
&Rectangle_getArea,
&Rectangle_draw,
&Rectangle_move,
};
////////////////C++ Counterpart of above code//////////////////
class Rectangle : public Shape {
Point leftTop;
Point rightBottom;
public:
virtual float getCircle();
virtual float


相关文档:

ARM 标准C/C++ 运行时库


1.
运行时库的路径
指定方式:
(1)      
连接选项
–libpath
(2)      
环境变量
ARMLIB
优先级:
      
libpath
高于
ARMLIB
被指定的路径:
      
包含
a ......

c/c++程序的内存分配 [转]

题记:
所有的完美,都是在崩溃的一刻达到的!
我一直回避程序的内存管理,因为爱之愈深,恨之愈烈。但是,还是由很多的朋友一直在体这方面的问题,所以就索性把它坦白了,也许对你我都是一件好事情。
首先,需要搞清楚:变量的类型和它的存储类别是两个概念。
数据类型和内存管理没有直接的关系。
一个由c/C++编 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号