Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的头文件和面向对象编程的可重用性?_C_Oop_Header Files_Code Reuse - Fatal编程技术网

C语言中的头文件和面向对象编程的可重用性?

C语言中的头文件和面向对象编程的可重用性?,c,oop,header-files,code-reuse,C,Oop,Header Files,Code Reuse,在采访中,我被问到,由于可重用性是面向对象编程的主要优势之一,但它也可以通过在C语言中包含头文件来实现?那么OOP可重用性和C头文件有什么区别呢?如果“可重用性”只是暗示代码不需要在每个代码模块中重复,那么是的,C中的头文件完成了这项任务,因为它允许在一个代码模块中使用外部链接定义的函数和变量的声明在另一个代码模块中使用,而用户无需重新键入所有这些声明和/或尝试放置通常属于库一部分的每个函数的每个定义进入每个代码模块。这样就防止了代码的重复 面向对象编程,如使用C++和java语言中的继承和多态

在采访中,我被问到,由于可重用性是面向对象编程的主要优势之一,但它也可以通过在C语言中包含头文件来实现?那么OOP可重用性和C头文件有什么区别呢?

如果“可重用性”只是暗示代码不需要在每个代码模块中重复,那么是的,C中的头文件完成了这项任务,因为它允许在一个代码模块中使用外部链接定义的函数和变量的声明在另一个代码模块中使用,而用户无需重新键入所有这些声明和/或尝试放置通常属于库一部分的每个函数的每个定义进入每个代码模块。这样就防止了代码的重复


<>面向对象编程,如使用C++和java语言中的继承和多态性,有类似的效果。您只需定义一次接口和/或基类,然后就可以通过继承在另一个类中“包含”该代码。此外,虚拟方法和多态性允许您编写以单个基类类型作为参数的函数,同时调用在派生类类型中实际定义的代码。这本质上意味着您可以在旧代码(即接受基类类型的函数)中调用新代码(即派生类)。例如,作为库开发人员,您可以定义一组基类类型/接口,用户可以从这些基类派生,但仍然可以在库中包含的接受基类类型参数的相同函数中有效地使用它们。因此,您不必重复这些功能。。。它们仍然可以被您的“新”派生类使用。

基本上,不需要OOP,只需使用包含的头,您就可以使用现有函数,而无需自己重新编写

但是,如果您打算使用一个非常相似但略有不同的函数,那么您别无选择,只能自己编写。在这种情况下,您不能重用原来的函数,您必须编写一个新函数


OOP的优点:如果该函数是一个类,那么您可以从它继承,只添加几个小方法,这样您就可以重用原始类的大多数方法。

这里重要的是不要混淆对OOP和OOP本身的语言支持。可重用C代码的常见做法是定义对头文件中的数据类型进行操作的数据类型和函数,然后根据这些数据类型和函数实现函数。仔细看,这是一个OOP实现,尽管没有适当的语言支持,因此稳定性较差。但是:typedef数据结构和在这些数据结构上操作的函数的C头文件是OOP的一个实现


因此,代码重用性没有区别,它只是两个不同层上的一个视图。OOP是一个范例,C标题是关于C上下文中的实现。

OOP可重用性是一个概念,您可以重用现有的代码、数据和类。C头文件是it应用程序的一个很好的例子,头文件的使用者可以随时使用库。有什么区别?OOP可重用代码中是否有比头文件更多的优点?头文件是OOP可重用性的一个例子。谁说过代码重用是OOP独有的?您可以在没有OOP的情况下实现代码重用(当然,实现代码重用的细节可能有所不同)。每一个像样的函数式编程项目都能做到这一点,一些过程性代码就是这样编写的。继承到重用代码既缺少继承点(“是一种”关系),也缺少更大的代码重用来源:多态性。但在继承中,如果您想要不同的实现,即重写,您也必须重写代码。所以我们也可以在这里实现它,包括头文件实现新方法,并在任何地方使用这个库来定制方法的实现。