结构和类的嵌套

时间:2010-06-20 17:53:08

标签: c++

#include<iostream>
using namespace std; 
struct My_Class{
class My_struct{
int am_i_in_class_or_struct;
};
};

int main(){
cout<<sizeof(My_Class)<<endl;
cout<<sizeof(My_struct)<<endl;
cout<<sizeof(int);
}

请解释: 当我在Turbo C上执行上述程序时,我得到了输出: 1 2 2 现在不应该在每种情况下大小相同,或者至少My_Class应该具有与My_struct相同或更大的大小! 如果程序中有错误,请尽可能修复它们,否则请忽略它并专注于手头的问题! 我不相信Turbo C ......但是目前我的VS 2008由于我的Ram变坏而一直崩溃!

2 个答案:

答案 0 :(得分:6)

My_Class不包含My_struct,它只是定义它。如果您想从外部My_struct创建My_Class个实例,则会将其称为My_Class::My_struct

为了在My_struct中实际包含My_Class个实例,您应该

struct My_Class{
  class My_struct{
    int am_i_in_class_or_struct;
  };
  My_struct myStructInstance;
};

答案 1 :(得分:5)

您正在嵌套声明,但不是数据。在另一个类中声明一个类并不会神奇地使内部类的数据成员也成为外部类的成员。您的代码几乎等同于

struct My_Class{
};

class My_struct{
  int am_i_in_class_or_struct;
};

只有一个区别。在您的代码中,结构的名称是My_Class::My_struct。在我的版本中,它只是My_struct。只有名字改变了。没有其他的。 (实际上,在访问权限方面存在一些其他差异,但它与所述问题并不直接相关。)