Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4462926
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: C/C++

2011-05-13 14:48:11

什么是封装??
    封装就是要保护好程序的隐私,不该让调用者知道的事,就坚决不要暴露出来。

好处:
    1. 隔离变化
    2. 降低复杂度

怎么样封装??
   
    1.隐藏数据结构
       1.1 如果是内部数据结构,外面完全不会引用,则直接反正C文件中,千万不要放在头文件中。
       1.2 如果该数据结构再内外都要使用,则数据结构可以放在头文件中。
           在我们实现 双向链表中 struct _list{} 结构体 在内、在外都要使用到的。所以我们将结构体放置在头文件中,如果我们放在C文件中,程序就会报错。修改过的

报错信息:非关联 指针 到不完整类型

  1. error: dereferencing pointer to incomplete type
所以我们修改为: 代码为v2-0: v2-0.rar  
  1. #ifndef _LIST_H
  2. #define _LIST_H

  3. typedef char ElemType;
  4. struct _list;
  5. typedef struct _list LIST;
  6. struct _list
  7. {
  8.     ElemType data;
  9.     struct _list *prior;
  10.     struct _list *next;
  11.     int length; //获取链表结点数
  12. };


           如果说,数据结构只是在内部使用,我们可以这么定义:

  1. 在头文件中声明该数据结构体
  2. struct _LrcPool;
  3. typedef struct _LrcPool LrcPool;

  4. 在C文件中定义该数据结构
  5. struct _LrcPool
  6. {
  7.     ssize_t unist_size;
  8.     ssize_t n_prealloc_units;
  9. };

    2. 隐藏内部函数
       2.1 在头文件中,只放最少的接口函数的声明
       2.2 在C文件中,所有内部函数都加上static关键字


    3. 禁止全局变量

       全局变量始终都会占用内存空间,共享库的全局变量是按页分配的,哪怕只有一个字节的全局变量也占用一个页,这样一来就会照成不必要的内存空间浪费。
       将单线程修改为多线程会遇到麻烦



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