C语言的OOP编程

       在网络上搜索C语言与C++语言的区别,有很多资料都会提到:C语言是“面向过程编程”的语言。在开发小型的应用程序时,程序员用C语言较为得心应手。但是当问题比较复杂,程序的规模比较大的时候,面向过程的编程方法就显出它的不足,此时,需要使用面向对象的编程来解决大型软件问题。

       那么,大型的软件就使用C++语言来开发,小型的软件就使用C语言来开发了吗?实际情况会是怎么样呢?

其实,C语言可以进行面向对象编程。例如Linux操作系统就是使用C来编写的,Linux内核使用了OOP(Object Orient Programing 面向对象程序设计)的思想。

C语言进行面向对象编程,就是使用struct结构体和函数指针来实现。这个过程需要比较高的C语言编程技术。在学习Linux C编程的时候,我们使用结构体和函数指针,实现面向对象的编程。而且,在C++课程,我们学习了this指针之后,也有相应的章节,介绍C语言模拟C++的面向对象编程。

所以,我们也可以使用C语言实现面向对象编程。

C++更多的是提倡一种“设计方法 --- 即面向对象的设计理念”,这种设计理念使用C++语言来实现比较方便,例如,C++提供了类的定义,提供private, protocol, public等访问限制,实现封装性更好。所以,使用C++语言来实现OOP面向对象编程,比较容易实现。

但是,我们需要清楚:OOP面向对象编程,只是一种思想。使用C语言也可以实现。

C语言模拟C++的this对象思想

       通过前面对this指针对象的学习,知道this指针对象的定义和工作机制。它是实现C++面向对象编程的基础。掌握了this指针对象的工作机制,我们也可以使用C语言来模拟this指针对象的工作,实现C语言的面向对象编程。

       所以,理解了this指针对象的工作机制,我们就可以使用C语言来模拟C++的思想,实现面向对象编程。程序测试例子如下:

程序运行结果如下:

       程序分析如下:

(1) 定义结构体类型struct c_student,在结构体中定义了成员变量和成员函数,其成员函数的第一个参数,必须是当前结构体的类型,相当于this指针的类型。

(2) 定义对象初始化函数c_student_init(),给对象的函数指针成员,设置指向对应的函数。

(3) 调用stud1结构体对象的函数指针,如下:

//调用stud1的成员函数

stud1.construct(&stud1, "www.mylinux.vip");

stud1.print(&stud1);

       此时,函数的第一个参数,必须是调用当前函数的对象。这个就模拟了C++的this指针。所以,在construct(), print() 函数指针内部,就有了pthis参数,可以指向调用当前函数的stud1对象,就可以访问到调用当前函数的stud1对象。这个功能,实现了C++的this指针机制。所以,C++的this指针是一个非常重要的概念。

       充分理解this指针的工作机制,就可以使用C语言来进行面向对象编程。那么,C语言也可以编写封装性好、模块化好的程序。

 

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

更多推荐

C语言的OOP(面向对象)编程