C++的封装、多态、继承在C中的对应实现方式

来源:互联网 发布:linux目录权限 编辑:程序博客网 时间:2024/05/20 07:31

C++的特点:封装、多态、继承


1.封装是面向对象最重要的特征之一(C++中的类class),封装就是指隐藏。 

封装的优点:(1)确保用户代码不会无意间破坏封装对象的状态;(外部程序不能随便改变对象中的状态)(2)被封装的类的具体实现细节可以随时改变,而无需调整用户级别的代码(底层的实现与上层的接口无关)

2.继承是面向对象的又一重要特征。继承可以使用不同的类的对象具有相同的行为;为了使用其他类的方法,我们没有必要重新编写这些旧方法,只要这个类(子类)继承包含的方法的类(父类)即可。 从下往上看,继承可以重用父类的功能;从上往下看,继承可以扩展父类的功能。


3、多态多态可以使我们以相同的方式处理不同类型的对象。我们可以使用一段代码处理不同类型的对象,只要他们继承/实现了相同的类型。这样,我们没有必要为每一种类型的对象撰写相同的逻辑,极大的提高了代码的重用。 


C语言是一种面向过程的程序设计语言,而C++是在C语言基础上衍生来了的面向对象的语言,实际上,很多C++实现的底层是用C语言实现的(http://www.ibm.com/developerworks/cn/linux/l-cn-cpolym/index.html?ca=drs-)

1.C语言中的封装

在C语言中,可以用结构+函数指针来模拟类的实现,而用这种结构定义的变量就是对象。

封装的主要含义是隐藏内部的行为和信息,使用者只用看到对外提供的接口和公开的信息。有两种方法实现封装:

(1)    利用C语言语法。在头文件中声明,在C文件中真正定义它。(只将非static的函数和变量暴露出来)

(2)    把私有数据信息放在一个不透明的priv变量或者结构体中。只有类的实现代码才知道priv或者结构体的真正定义。(外部无法直接修改struct中的变量)


2.C语言中的继承

在C语言中,可以利用“结构在内存中的布局与结构的声明具有一致的顺序”这一事实实现继承。

struct Circle{const struct Point point; //放在第一位,可表继承int radius;};

3.C语言中的多态

可以使用C语言中的万能指针void* 实现多态


一,static和extern:

大工程下我们会碰到很多源文档。
                
文档a.c
static int i; //只在a文档中用
int j;    //在工程里用
static void init()         //只在a文档中用
{
}
void callme()          //在工程中用
{
   static int sum;
}

上面的全局i变量和init()函数只能用在a.c文档中,全局变量sum的作用域只在callme里。变量j和函数callme()的全局限扩充到整个工程文档。所以能够在下面的b.c中用extern关键字调用。extern告诉编译器这个变量或函数在其他文档里已被定义了。
文档b.c
extern int j;     //调用a文档里的
extern void callme();  //调用a文档里的
int main()
{
  ...
}

extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:
文档A.cpp调用a.c里面的变量i和函数callme()
extern "C"  //在c++文档里调用c文档中的变量
{
   int j;
   void callme();
}
int main()
{
   callme();
}

二,static法则:

    A、若全局变量仅在单个C文档中访问,则能够将这个变量修改为静态全局变量,以降低模块间的耦合度;
    B、若全局变量仅由单个函数访问,则能够将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
    C、设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;


0 0
原创粉丝点击