本文共 1425 字,大约阅读时间需要 4 分钟。
目录
C++中,结构体(struct)与类(class)基本类似,除了下面的几个不同点。
类的成员默认是私有的(private),而结构体的成员默认是公有的(public)
例子1会编译失败,例子2运行正常。
// 例子1#includeclass Test { int x; // x是私有的};int main(){ Test t; t.x = 20; //编译错误,因为x是私有成员 return 0;}
下面是例子2:
// 例子2#includestruct Test { int x; // x是公有的};int main(){ Test t; t.x = 20; return 0;}
当从一个class或者struct派生出一个结构体时, 默认的继承方式是public。而派生出一个类时,默认的继承方式是private。
例子3会编译失败,例子4运行正常。
// 例子3#includeclass Base {public: int x;}; class Derived : Base { }; // 等价于class Derived : private Base {} int main(){ Derived d; d.x = 20; //编译错误,因为是私有继承base return 0;}
// 例子4#includeclass Base {public: int x;}; struct Derived : Base { }; // 等价于struct Derived : public Base {} int main(){ Derived d; d.x = 20; //正常工作,因为是公有继承base getchar(); return 0;}
使用sizeof计算class或struct的大小时,会有所区别:
#includeclass Outer{ public: class Inner { };};int main(){ std::cout<<"sizeof(Outer)="< <<", sizeof(Inner)="<
运行输出:
sizeof(Outer)=1, sizeof(Inner)=1// 保存为.cpp文件进行编译#includestruct dummy{};int main() { std::cout<<"sizeof(dummy)="<
运行输出:
sizeof(dummy)=1C++默认会对class/struct对象类型中,添加额外的一些信息,使得它们可以用来比较。所以size不是0。 但是,如果保存为.c文件,则结果为0。
如下所示:#includestruct dummy{};int main(){ struct dummy d; printf("sizeof(dummy)=%d", sizeof(d)); return 0;}
运行输出:
sizeof(dummy)=0转载地址:http://kqeji.baihongyu.com/