1、STRUCT:
可以利用这个关键字实现一些技巧,这些技巧是类所不具备的。
比如可以形成一个空间拥有可变大小的数组。
struct mumble
{
char pc[1];
}
struct mumbel *pmumbl=(struct mumble*) malloc(sizeof(structmumble)+strlen(string)+1);
strcpy(pmumbl->pc,string);
建立一个结构,该结构内的PC成为一个可变字符串,定义了一个MUMBLE的对象后,STRUCT本身和该字符串配置足够的内存。
2、class,把上述的STRUCT改成CLASS,会带来很多问题
(1)能保证出现在一个声明空间内的数据按声明次序处于内存布局,
但不被放置在声明空间的就不能保证排列次序,
class mumble
{
public:
//.....
protected:
//.....
private:
//....
char pc[1];
}
在这里,如果procteced成员放在privated之后,就不能保证PC有足够的空间存放可变字符串。
3、那么把CLASS和STRUCT相结合就可以了吗
struct c_point{...};
class point :public c_point{...};
但vc中对虚函数的继承布局做了一些改变,这样有时候也行不通
4、组合
struct c_point{...}
class point{
public:
operator c_point(){return c_point;}
//....
private:
c_point _c_point;
//....
}
_c_point封装一段内存空间,可以在里面放数据
可以利用这个关键字实现一些技巧,这些技巧是类所不具备的。
比如可以形成一个空间拥有可变大小的数组。
struct mumble
{
char pc[1];
}
struct mumbel *pmumbl=(struct mumble*) malloc(sizeof(structmumble)+strlen(string)+1);
strcpy(pmumbl->pc,string);
建立一个结构,该结构内的PC成为一个可变字符串,定义了一个MUMBLE的对象后,STRUCT本身和该字符串配置足够的内存。
2、class,把上述的STRUCT改成CLASS,会带来很多问题
(1)能保证出现在一个声明空间内的数据按声明次序处于内存布局,
但不被放置在声明空间的就不能保证排列次序,
class mumble
{
public:
//.....
protected:
//.....
private:
//....
char pc[1];
}
在这里,如果procteced成员放在privated之后,就不能保证PC有足够的空间存放可变字符串。
3、那么把CLASS和STRUCT相结合就可以了吗
struct c_point{...};
class point :public c_point{...};
但vc中对虚函数的继承布局做了一些改变,这样有时候也行不通
4、组合
struct c_point{...}
class point{
public:
operator c_point(){return c_point;}
//....
private:
c_point _c_point;
//....
}
_c_point封装一段内存空间,可以在里面放数据