C++:C与C++的区别 (附:C++知识点超详解思维导图)


这段时间针对 C++ 的学习到了一个收尾的阶段。目前所涉及到了 C++ 基础语法、大小知识点的学习。当然语言学习绝对离不开实战项目的练手,网络优质资源以及各类经典丛书也是 C++ 学习的巨大宝库。在此以思维导图的形式进行阶段性总结。

C++初阶阶段性总结

在这里插入图片描述

C++进阶阶段性总结

在这里插入图片描述

C++的三大特性:封装、继承和多态

所谓封装就是将某些东西包装盒隐藏起来,让外界无法直接使用,只能通过某些特定的方式才能访问。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是通过外部接口以及特定的访问权限(private、public、protected)来使用类的成员。

多态可以使我们以相同的方式处理不同类型的对象,我们可以使用一段代码处理不同类型的对象,只要他们继承/实现了相同的类型。这样我们没有必要为每一种类型的对象编写相同的逻辑,极大的提高了代码的重用。其实,用简单的一句话来形容就是:多态性,允许将子类类型的指针赋值给父类类型的指针,多态性在C++中是通过虚函数实现的。虚函数就是允许被其子类重新定义的成员函数。而子类重新定义父类虚函数的做法,称为“覆盖”,或者称为“重写”。子类重写父类中虚函数时,即使不用virtual声明,该重载函数也是虚函数。

继承是面向对象的一个重要概念,如果一个类B继承自另一个类A,就把这个类B称为“A的子类”,而把A称为“B的父类”。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码,在令子类继承父类的同时,可以重新定义某些属性,并重新某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。

C语言和C++的区别与联系

对于语言本身而言,C是C++的子集。C与C++的最大区别在于,他们用于解决问题的思想方法不一样。

一、面向过程语言和面向对象语言

我们都知道C语言是面向过程语言,而C++是面向对象语言,说C和C++的区别,也就是在比较面向过程和面向对象的区别。

  1. 面向过程和面向对象的区别

(1)面向过程:面向过程编程就是分析出解决问题的步骤,然后把这些步骤一步一步的实现,使用的时候一个一个的依次调用就可以了。
(2)面向对象:面向对象编程就是把问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了通过对象之间的交互将事情完成(描述某个事物在整个解决问题的步骤中的行为)

举个例子:(玩五子棋) 
(1)用面向过程的思想来考虑就是:开始游戏,白子先走,绘制画面,判断输赢,轮到黑子,绘制画面,判断输赢,
	重复前面的过程,输出最终结果。 

(2)用面向对象的思想来考虑就是:黑白双方(两者的行为是一样的)、棋盘系统(负责绘制画面)、
	规定系统(规定输赢、犯规等)、输出系统(输出赢家)。 
	面向对象就是高度实物抽象化(功能划分)、面向过程就是自顶向下的编程(步骤划分)

  1. 面向过程和面向对象的优缺点

在学习一些比较抽象的概念时,由于我们的理解能力很有限,有时候一些比较恰当的例子也是有助于我们学习的,因此对二者的优缺点比较,还是先举例子,后总结吧!

(1)用面向过程写出来的程序就像一份蛋炒饭,也就是米饭和炒的菜均匀的混合在了一起,因此蛋炒饭入味均匀。
	不会像盖浇饭那样,可能有时候吃的菜多饭少,还有时候菜少饭多。但是如果你不喜欢吃蛋炒饭,只想吃肉炒饭,
	那么原来做的这份蛋炒饭就得倒掉了,重新做一份肉炒饭,厨师就得辛苦了!

(2)用面向对象写出来的程序就像一份盖浇饭,也就是米饭和盖菜分别做好,将盖菜放在米饭上面。
	盖浇饭虽然没有蛋炒饭那样入味均匀,但是如果给了你一份土豆丝盖饭,你又不想吃了,换成牛肉盖饭。
	厨师只需要将米饭上面的土豆丝倒掉,重新做一份牛肉放在上面就好了。

基于上述的例子,二者的优劣总结如下:

面向过程语言:

  • 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

  • 缺点:没有面向对象易维护、易复用、易扩展

面向对象语言:

  • 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
  • 缺点:性能比面向过程低

具体语言的区别:

这个方面就参考之前的博客吧~~

知识点习题

  1. #include<head.h>#include"head.h" 有什么区别?

回答:

  • 尖括号< >表明这个文件是标准头文件。查找过程会首先检查预定义的目录,可以通过设置搜索路径环境或者命令行来修改这些目录。
  • 如果文件名用一对引号括起来,则表明该文件是用户提供的头文件,查找该文件时将从当前文件目录中寻找文件,然后在标准位置寻找文件。
  1. C++中main函数执行完后还执行其他语句吗?

可以使用 C 库中atexit()函数来注册程序正常终止时要被调用的函数。

atexit()函数声明:

int atexit(void (*func)(void))	// 当程序正常终止时,调用指定的函数 func。
  • atexit()函数的参数是一个函数指针,该函数指针指向一个没有参数也没有返回值的函数。

在一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的调用顺序与其注册顺序相反,即最先注册的函数最后调用,最后注册的函数最先调用。

测试代码:

#include<stdio.h> 
#include<stdlib.h> 

void fun1(void)
{ 
    printf("fun1\n"); 
} 


void fun2(void)
{
    printf("fun2\n");  
} 


void fun3(void)
{
    printf("fun3\n"); 
} 

int main() 
{ 
    atexit(fun1); 
    atexit(fun2); 
    atexit(fun3); 

    printf("main exit\n"); 

    return 0; 
} 

测试结果:

在这里插入图片描述


如有不同见解,欢迎留言讨论~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值