用c语言封装数据与方法

用c语言封装数据与方法

ID:15854877

大小:72.00 KB

页数:12页

时间:2018-08-06

用c语言封装数据与方法_第1页
用c语言封装数据与方法_第2页
用c语言封装数据与方法_第3页
用c语言封装数据与方法_第4页
用c语言封装数据与方法_第5页
资源描述:

《用c语言封装数据与方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、用C语言封装数据与方法作者:野男人  来源:博客园  发布时间:2008-08-2215:55  阅读:1098次  原文链接  [收藏]  类的一个特征就是数据与方法封装在一起,在编译器越来越智能的今天,大多数程序员已经习惯了数据与方法“本来”就是一个“整体”的概念。事实是不是这样呢?在面向对象语言出现之前的程序世界又是什么样的呢?让我们先回到C的世界中,看看那里的数据与方法(C中称为函数)是什么样子的。   在C中通常定义一个结构体用来把一些数据组合在一块儿,然后定义一个函数处理这个结构体。例如

2、:/*版本1:*/typedef struct _SampleData{    int data1;    char data2[10];}SampleData;/*函数定义,打印SampleData结构的数据*/void ProcessData(){    SampleData data;    data.data1 = 12;    strcpy(data.data2,"123456789");    printf("data1=%d, data2=%s", data.data1, data.d

3、ata2); }可以看到数据与对数据的操作是分离的,只要把数据所在的文件包含进来,就可以任意定义一个函数来进行操作。 接着再看看用C++把数据与方法封装在一起的代码形式。//C++版本class SampleData{public:    SampleData(){};    ~SampleData(){};    void ProcessData()    {         data1 = 12;         strcpy(data2,"123456789");        cout<<"

4、data1="<

5、    int data1;    char data2[10];    void ProcessData();   //声明操作}SampleData; 而ProcessData()函数的实现依然跟【版本1】一样。编译,链接。真好,没有出现任何的错误。是否这样就可以了呢?噢,忘记了一个重要的步骤,还没有在任何地方使用过这个SampleData结构体的ProcessData操作呢。OK,没有关系,在主函数声明调用一下吧。大概像下面这样:void  main(){    SampleData data

6、;    data.ProcessData();} 再编译,通过。链接,出现错误:unresolvedexternalsymbol"public:void__thiscall_SampleData::ProcessData(void)"(?ProcessData@_SampleData@@QAEXXZ)。编译器找不到结构体中声明的ProcessData函数的具体实现,看来现在这样调用data.ProcessData()是不行的。编译器并没有我们想象的那样自动地把ProcessData的声明与它的实现

7、对应起来。那么怎样做才能达到预先的目的呢?   如果能把ProcessData()函数的地址赋给SampleData结构里的操作声明,那么一切问题都解决了。看来【版本2】也需要改进一下。 /*版本3:*/ typedef struct _SampleData{    int data1;    char data2[10];    void (*ProcessData)();   //注意,已经改为ProcessData的函数指针}SampleData;主函数也得改一下,在使用data.Proces

8、sData()之前,把函数ProcessData的地址赋给结构体里的函数指针变量。结果如下:void  main()...{SampleData data;data.ProcessData = ProcessData;   //注意,初始化函数指针变量data.ProcessData();} 再编译、链接,终于通过。到这里你已经认为这样成功的实现了上面定义的SampleData的C++版本。不过不要高兴的太早,做个测试看看。void  main()...{    Sa

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。