C++实践之体会

2022-06-14 08:14:51 浏览数 (1)

   一直以来都在深入的linux底层,每天都在跟C语言打交道,甚至跟汇编语言打交道。这次跟同事合作开发一个演示项目。涉及到图形界面开发,以及到中间件开发(基于C )。自然而然C 是无法回避的。一开始面对C 代码,真不习惯。不像C语言,各个函数可以直接搜或者source insight关联函数调用之间关系。因为C 存在函数重载现象,按函数名搜出来的函数一大堆,最后还是要分析形参已经对象所在类来判断是调用哪个函数。

还好以前学校学过C 课程,虽然忘了细节,基本概念尚存,通过一段时间的学习和使用,总结心得如下:

C 三大特性:

1.      封装性

每一个类都在以XX.h 头文件形式封装。每个成员函数,在XX.cpp中实现各个成员函数。要弄清各个成员的访问权限或可见性很重要

2.      继承性

基类,派生类的之间层层继承,要搞起各个类之间的关系,以及对外的可见性

3.      多态性

这个东西很麻烦,现在总结一下,我在项目中遇到的重要的几个困惑

1.虚函数的作用:

某个一个家族类,如果其父类和子类都有某个函数f(),如果定义为虚函数的形式,调用时,调用的子类的函数(动态联编),否则调用父类函数。虚函数的引入是消除父子之间的同名函数的二义性,否则就要类名::四点来区分二义性,但不规范。(一般new一个对象,通过该对象指针来使用)

总之你看到一个函数,如果在该类实现,就调用该类,如果没有,肯定是在其父类已经实现了,可以追溯到其父父类

2.纯虚函数的作用

主要完成抽象与具体的关系

父类,只是一个抽象,以纯虚函数的形式来实现。而子类却根据具体情况,进行具体的实现。

比如一个求面积的实现

Class area

{

 Public:

 Virtual area(int x ,int y) =0;

}

Class square:public  area

(

 Int  Area(int x, int y); 

}

Class cycle: publicare

{

Int Area(int x,int y);      

}

 Int  cycle:: Area(int x, int y)

{

Return pi*x*y; }

3.虚基类

类B 从类A中继承f()函数

类C 也从类A中继承f()函数

类E从类B和类C继承过来

那边类B,C在继承类A时以虚基类形式继承

那么在E类对象中无论怎样访问f()函数都不存在二义性

否则就要类符号::来区分,就不存在二义性,但加类符号::太麻烦,就采用虚基类直接完成

4.C 代码和C代码的相互调用

  语言C 和C编译的链接的原理不一样,因此C 不能直接调用C,C也不能直接调用C 。因此要通过#ifdef  __cplusplus extern C 关键词对 .h文件进行宏处理,告诉C 编译器对该头文件里面的函数按C来链接,而不是C 方式链接,这样对C代码和C 代码就进行了区分。

4.C 语言是面向过程的语言,在C语言中,一般关注的是程序执行流程。但在C 是面向对象语言,除了关心程序的流程,更多的还需要关注类与类直接的之间的关系,以及成员的可见性。

0 人点赞