Chinaunix首页 | 论坛 | 博客
  • 博客访问: 183155
  • 博文数量: 67
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 622
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-19 19:12
文章分类

全部博文(67)

分类: C/C++

2014-11-19 19:29:12

class A

 {

  public:

     int i;

     int j;

     static int s;

     virtual void Say(){};

     int geti(){return i;};

     int f(){cout<<"wahaha"<

#define L 4

 };

32位系统,sizeof(A)=12,即sizeof(i) + sizeof(j) + sizeof(vptr)

注意:

1、static int s不占用类的空间,他存储在全局数据区

2、因为有了virtual函数,所以有一个vptr,否则没有

3、define不占用空间,编译时进行替换

4、成员函数不占类的空间,而是放在代码区,无论是否实例化都存在,而成员变量(非static)只有实例化时才分配空间(在stack或heap上)


所以考虑下面的代码:

A *a = NULL;

a->f(); //ok,因为成员函数一直存在,不依赖于实例化

a->geti();//segment fault,虽然函数代码存在,但未实例化不能访问成员变量(不存在)

阅读(875) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~