Chinaunix首页 | 论坛 | 博客
  • 博客访问: 82192
  • 博文数量: 21
  • 博客积分: 591
  • 博客等级: 中士
  • 技术积分: 165
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-02 11:40
文章分类
文章存档

2011年(18)

2010年(3)

我的朋友

分类: C/C++

2011-01-04 18:33:39

       先来看一个简单的列子:

struct A
{
  char a;
//1 Byte
  char b;
//1 Byte
  char c;
//1 Byte
  unsigned short d;
//2 Byte
  int e;
//4 Byte

} data;

  这时 sizeof(data) = 12 ,为什么?
  因为 unsigned short d 刚好越过边界, 所以要把 d 放到边界上, 所以第一个 4 bytes 只有 a,b,c 跟一个空的沒有用到的 byte, 第二个 4 bytes 上只有 d 跟 2 bytes 沒有用到, 最后一个 4 bytes 最是放 e

   为什么是4 bytes呢?所有元素的最小公倍数,如果没有了 int e 这条命令,那就变成2 bytes ,即sizeof(data) = 6


  以下比较一下C++中struct和class的区别,可以看到,除了两点区别,他们是一样的。


  关于使用大括号初始化
  class和struct如果定义了构造函数的话,都不能用大括号进行初始化
  如果没有定义构造函数,struct可以用大括号初始化。
  如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。

  关于默认访问权限
  class中默认的成员访问权限是private的,而struct中则是public的。


  关于继承方式
  class继承默认是private继承,而struct继承默认是public继承。


  讨论一下结构(struct)与类(class)的区别,你认为结构(struct)有些什么作用,可以完全用类(class)取代么??
  首先,讨论这个问题应该仅从语法上讨论,如果讨论不同人之间编程风格上的差异,那这个问题是没有答案的。毕竟不同的人偏好不同。
  从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别:
  (一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理;
  (二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。
  除了这两点,class和struct基本就是一个东西。语法上没有任何其它区别。
  不能因为学过C就总觉得连C++中struct和class都区别很大,下面列举的说明可能比较无聊,因为struct和class本来就是基本一样的东西,无需多说。

    但这些说明可能有助于澄清一些常见的关于struct和class的错误认识
  (1)都可以有成员函数;包括各类构造函数,析构函数,重载的运算符,友元类,友元结构,友元函数,虚函数,纯虚函数,静态函数;
  (2)都可以有一大堆public/private/protected修饰符在里边;
  (3)虽然这种风格不再被提倡,但语法上二者都可以使用大括号的方式初始化:A a = {1, 2, 3};不管A是个struct还是个class,前提是这个类/结构足够简单,比如所有的成员都是public的,所有的成员都是简单类型,没有显式声明的构造函数。
  (4)都可以进行复杂的继承甚至多重继承,一个struct可以继承自一个class,反之亦可;一个struct可以同时继承5个class和5个struct,虽然这样做不太好。
  (5)如果说class的设计需要注意OO的原则和风格,那么没任何理由说设计struct就不需要注意。
  (6)再次说明,以上所有说法都是指在C++语言中,至于在C里的情况,C里是根本没有“class”,而C的struct从根本上也只是个包装数据的语法机制。
  最后,作为语言的两个关键字,除去定义类型时有上述区别之外,另外还有一点点:“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数。

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

chinaunix网友2011-01-05 11:02:59

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com