C语言支持继承吗?

  • 本文关键字:继承 支持 语言
  • 更新时间 :
  • 英文 :


假设我们有一个头文件"add.h"带有"add(int,int)"函数,"subtract.h"头文件带有"subtract(int,int)"函数。假设我们有一个头文件"calc.h"如下:

--------------add.h-------------
int add(int a,int b)
{
     return (a+b);
}
-------------sub.h--------------
int sub(int a,int b)
{
     return (a-b);
}
-------------calc.h-------------
#include "add.h"
#include "sub.h"
------------program.c-----------
#include "calc.h"
#include stdio.h
#include conio.h
void main()
{
    printf ("%d",add(1,2));
    printf ("%d",sub(3,1)); 
}

难道我们不能说它是继承的形式,其中calc.h继承自add.h和sub.h,而program.c继承自calc.h吗?我知道这可能是一个愚蠢的疑问,但我想澄清我的疑问?此外,请告诉我为什么应该更喜欢面向对象的程序。而不是过程编程?

不,这不是继承。这只是一个简单的包含。您可以在C语言中使用嵌套结构来模仿继承,GTK框架就是一个突出的例子。但是C本身不支持继承。

没有人说你应该选择OO。这只是你的选择。许多人发现维护OO代码更容易,特别是在2人以上的团队中。但是用什么是你自己的选择。

关于面向对象或过程问题:

OO总是被大肆宣传所包围。有很多与OO相关的东西,但如果你去掉那些无用的和炒作的特性,OO可以归结为三个主要的基石:模块化编程使用自治模块,这些模块与程序中不需要知道的部分缺乏耦合(非常重要),私有封装防止意外或故意访问不应该从模块外部更改的变量,防止错误和面条式代码(重要),继承具有多态性,这可以使代码在将来更容易维护和扩展(有些有用)。

模块化编程与语言无关,它只是好的程序设计的一部分。C语言通过static关键字和不完整类型来支持私有封装,尽管与支持私有关键字的OO语言相比,它是粗糙的。继承在C语言中是不被支持的,尽管正如其他人提到的,你可以通过各种结构体技巧来实现它。

当然,OO语言也有很多其他的东西,比如构造函数/析构函数、接口、泛型对象、操作符重载等等。你并不真的需要这些东西来编写程序,尽管它们中的一些使编程更容易。

我对OO vs过程的回答是:你应该使用模块化的程序设计和私有封装。两者都被认为是很好的OO实践,但是没有什么能阻止你在过程程序中使用它们,也没有什么能阻止你在c中使用它们。

不,这不是继承。继承意味着calc.h可以修改add()和subtract()的实现,但它不能,因为它只包含声明。

即使您决定substruct .c包含add()的新实现,那么您也会遇到问题,因为链接器不知道从哪个版本的函数中选择

最新更新