C语言面向对象编程结-构体实现面向对象编程
发布日期:2021-07-01 04:34:32 浏览次数:2 分类:技术文章

本文共 2114 字,大约阅读时间需要 7 分钟。

       结构体是一个非常重要的知识点,必须掌握和深入理解使用。现在网络上还经常讨论函数式编程和面向对象编程。很多人认为,C语言编程,就是函数式编程,C++, JAVA等高级语言,才是面向对象编程。

       其实,这是错误的认识!面向对象编程是一种思想,是一种编程思路,实现这种编程思路,不局限于是使用C语言还是使用C++语言。

       使用C语言也可以实现面向对象编程。例如linux的内核,这么复杂的一个操作系统,是使用C语言来设计完成,很多地方是使用了面向对象的编程思想。

       那么,使用C语言来实现“面向对象编程”思路,就是使用结构体来完成。C++中使用类来定义成员变量和方法,相应的,C语言也可以使用结构体来完成这项操作。C语言的结构体可以定义成员变量,同时,可以定义函数指针,实现C++类的方法。

       下面我通过程序测试例子来讲解“使用结构体实现面向对象编程”的知识。首先,给出程序测试例子代码:

       程序运行结果如下:

       在这个例子中,讲解一个图书管理系统中的借书和还书功能。对于读者来说,有普通读者和VIP读者。读者有借书和还书的操作。

       此时,我们使用面向对象编程的思想来设计程序。首先,分析设计程序要实现什么功能,它有什么对象进行活动,对象之间是什么关系,对象有什么操作。那么,我们可以归纳如下:

(1) 程序是一个图书馆的借书和还书功能模块;

(2) 程序是涉及到的活动对象是读者和图书;

(3) 对象之间的活动关系是:读者结束、读者还书;

(4) 读者有普通用户和VIP用户类型的区别;

(5) 普通用户和VIP用户的借书和还书有普通的操作;

       所以,归纳出了这些问题,我们就可以有如下是设计思路:

(1) 需要定义读者和图书这样的两个结构体类型;所以,我们定义了struct reader, struct book这样的结构体类型;

(2) 读者结构体类型中,需要定义普通用户和VIP用户的区分属性;所以,在struct reader结构体类型中,定义了 is_vip属性,用于定义当前读者的身份类型;

(3) 普通读者和VIP读者的借书和还书操作不一样,所以,定义普通读者操作是:

void my_borrow_book(struct reader* preader, struct book* pbook)

void my_payback_book(struct reader* preader, struct book* pbook)

VIP读者的操作是:

void my_vip_borrow_book(struct reader* preader, struct book* pbook)

void my_vip_payback_book(struct reader* preader, struct book* pbook)

       这些函数操作是读者的一个属性,所以,需要给读者定义函数指针成员,指向具体的操作函数。如下:

//定义函数指针, pfunc_borrow_book 类型的函数;

pfunc_borrow_book borrow_book;

//定义函数指针, pfunc_payback_book 类型的函数;

pfunc_payback_book payback_book;

       最终,在init_reader_function()函数中,根据读者是否为VIP类型,给对象的函数指针成员指向不同的函数。如下:

    if(preader->is_vip)

    {

       //给函数指针赋值, 让它指向具体的函数;

       preader->borrow_book = my_vip_borrow_book;

       preader->payback_book = my_vip_payback_book;

    }

    else

    {

       preader->borrow_book = my_borrow_book;

       preader->payback_book = my_payback_book;

    }

       那么,不同的读者类型,调用相同的函数指针,就调用指向不同的函数。例如:

r1.borrow_book(&r1, &b1);   //读者 r1 借书

r2.borrow_book(&r2, &b2);   //读者 r2 借书

       此时,读者都是调用borrow_book函数指针指向的函数,那么,由于r1是普通用户,它的函数指针指向my_borrow_book()函数,所以,r1.borrow_book()调用的就是my_borrow_book()函数。

       同理,r2是VIP用户,它的borrow_book函数指针指向my_vip_borrow_book ()函数,所以,r2.borrow_book()调用的就是my_vip_borrow_book ()函数。

       通过这个例子,我们更深入地学习了结构体的应用,并提出了面向对象的编程思想。使用C语言的结构体知识可以实现面向对象编程。

更多的交流可以访问:www.mylinux.vip   加QQ:1523520001,微信:13926572996,备注:linux编程;

学习、分享更多的linux C/C++ 编程知识。
 

 

转载地址:https://mylinux.blog.csdn.net/article/details/105201846 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:免费视频加密播放器
下一篇:C语言结构体(5) 结构体指针变量

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年05月08日 07时49分59秒