结构体实现面向对象编程

Posted LC编程开发者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体实现面向对象编程相关的知识,希望对你有一定的参考价值。

结构体是一个非常重要的知识点,必须掌握和深入理解使用。现在网络上还经常讨论函数式编程和面向对象编程。很多人认为,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语言的结构体知识可以实现面向对象编程。

总结

本章节我们学习了C语言的结构体知识,这是一个非常重要的知识点,需要读者重点掌握。读者可以参考文档的练习例子,自己手动敲写代码,多加运行测试,总结出对结构体类型的使用方式。

在文章的末尾,我们给出了C语言进行面向对象编程的例子。穿插讲解了面向对象编程的知识。这个知识点有些难度,初学者可以调过,后续学习了C++的知识点之后,可以再回来看看这个知识点,就比较容易掌握。

读者要仔细分析,掌握好每一个知识点,然后,自己总结出对该知识点的理解。自己总结出来的知识,理解才深刻,才是自己掌握的知识。

韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip

以上是关于结构体实现面向对象编程的主要内容,如果未能解决你的问题,请参考以下文章

如何在C语言里实现“面向对象编程”

Golang面向对象编程—结构体

Golang 面向对象编程

十面向对象编程_下

十面向对象编程_下

Go-面向对象编程详解(封装继承多态等)