假设我们有一个带有“add(int,int)”函数的头文件“add.h”,带有“subtract(int,int)”函数的“subtract.h”头文件。假设我们有一个头文件“ 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继承的吗? 我知道这可能是愚蠢的怀疑,但我想澄清我的怀疑? Furthur请告诉我为什么要选择面向对象的程序。而不是程序式编程?
答案 0 :(得分:5)
不,这不是继承。这只是简单的包含。您可以使用嵌套结构模仿C中的继承,这是GTK框架的一个突出示例。但是C本身并不支持继承。
没有人说你应该更喜欢OO。这只是你的选择。许多人发现维护OO代码更容易,特别是在团队中> 2人。但你使用的是你的选择。
答案 1 :(得分:2)
关于面向对象或程序性问题:
OO一直被大肆宣传所包围。 OO有很多相关的东西,但如果你删除了绒毛和炒作功能,OO归结为三个主要的角落:模块化编程与自主模块缺乏耦合到程序的部分他们不需要知道(非常重要),私有封装,它可以防止意外或有意访问不应该从模块外部更改的变量,以防止错误和意大利面条代码(重要)和具有多态性的继承,可以使代码在将来更容易维护和扩展(有些用处)。模块化编程根本与语言无关,它只是良好程序设计的一部分。 C通过static关键字和不完整类型支持私有封装,尽管与支持私有关键字的OO语言相比,它是粗略的。 C不支持继承,但正如其他人所提到的,你可以用各种结构技巧来实现它。
当然,OO语言还带有很多其他东西,比如构造函数/析构函数,接口,泛型对象,运算符重载等等。你真的不需要这些东西来编写程序,尽管其中一些程序编程更容易。
我对OO与程序的回答是:你应该使用模块化程序设计和私有封装。两者都恰好被视为良好的OO练习,但没有什么能阻止你在程序性程序中使用它们,没有什么能阻止你在C中使用它们。
答案 2 :(得分:1)
不,这不是继承。继承意味着calc.h可以修改add()和substract()的实现,因为它只包含声明而不能实现。
即使您确定substract.c包含add()的新实现,那么您也会遇到问题,因为链接器不知道可以选择哪个版本的函数。