• 大家赶快来说说C和C++到底有什么“奸情”吧


    别的学校什么情况我不清楚,但是在我们学校是大一上学期就学了C语言,大一下学期就学了C++。那个时候刚进入软件学院呐,哪里搞的明白什么C/C++,更别说C和C++有什么关系了,就是在不明白的情况下就开始乱用了,也就顺理成章的出现了这样的情况:大家写出来的程序看不明白是C还是C++,于是我们就开玩笑的说他们编的都是“C+”程序。最近也看到了也总有人在面试上问:C和C++有什么区别??于是乎,那就写一篇随笔吧~~~希望大家帮忙补充哦~~~

    区别一:

    首先,必须要提及的是我是ACM出身,搞了一年半和教练%¥#¥#%#¥~~~(呵呵,不说了~~),也就是说,我最初接触到的是面向过程的思想,很显然了,我的编程语言那个时候是C语言,后来接触到了C++就开始了面向对象的编程,那个时候我们也编过《图书管理系统》等这些老掉牙的东西。也就是说C语言是面向过程的语言,解决问题的思路是,把问题想象成一个过程,通过过程完成输入到输出的转化。而对于C++语言呢?C++可以说是面向对象的语言,考虑问题的思路是构造一些对象模型,每个对象内部包含有方法和数据,这些对象之间可以传递数据来完成功能的。其实严格的说C++是半面向过程半面向对象的,要不怎么出现了C#呢!!(C++++)关于面向过程和面向对象的问题,我想应该不用多解释的,资料多了去了!!

    区别二:

    学习C++应该首先接触到class吧,其实在C中也有类似的结构的感念叫struct。在C中的struct是这样要求的只包含数据成员,不允许有成员函数,并且默认数据成员是public类型的,即在外部是可以访问的。那么C++也有struct啊,但是是有区别的,C++中的struct是可以有成员函数,但是C++中的默认也是public的,也就是更接近 class 了。那么C++中为什么要同时又struct和class呢?其实在struct和class基本是一样的,主要有下面的四点区别:(1)class中的成员(数据和函数)默认是private,而在struct中默认是public访问权限。(2)对struct的继承默认是public继承,对class的继承确默认是private继承。(3)和template一起使用的区别,class可以替换typename但是struct不可以。(4)能否用大括号{}初始化。对于struct不提供构造函数的话理论上是可以的,因为数据成员默认是public类型的,而对于class,如果数据成员是private访问权限的则不能,public访问权限则可以利用大括号初始化,对于提供了构造函数的class,理论上也是可以完成初始化的。看看代码吧:

    View Code
     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 struct A
     6 {
     7     int x;
     8 };
     9 
    10 class B
    11 {
    12 public:
    13     int x;
    14 };
    15 
    16 class C
    17 {
    18     int x;
    19 };
    20 
    21 class D
    22 {
    23 public:
    24     int x;
    25     D(int i){};
    26 };
    27 
    28 int main()
    29 {
    30     A a[3] = {1,2,3};
    31     B b[3] = {4,5,6};
    32     C c[3] = {7,8,9}; //错误的
    33     D d[3] = {10,11,12};
    34     return 0;
    35 }

    区别三:

    学过C++的都知道C++中有个叫做“重载”的词儿,这在C++中是比较重要的,但是在C中是没有的,原因要从C和C++的编译的区别说起了,实际上函数被C++编译和被C编译器编译后在符号库中的名字是不同的,我局个例子就都明白了,比如函数bool IsEquel(int x ,int y),通过C语言编译器编译在符号库中是_IsEquel,而通过C++编译器在符号库中就变成了_IsEquel_int_int 了,现在如果还有一个函数bool IsEquel(float x ,float y),通过C++编译器在符号库中变成了_IsEquel_float_float,看看经过编译之后就变成了不同的函数,也就是重载了,而在C编译器中则不是了,现在可能也应该明白了:为什么要用参数个数或者类型的不同作为重载的条件了吧~~呵呵!!

    区别四:

    C和C++中的内存申请和释放方式也是不同的,在C中使用的是malloc和free,而在C++更经常使用的是new和delete,现在说说这两个组合的不同之处吧:malloc和free是函数,用来动态的申请和释放内存空间,申请的就是内存空间的大小,比如int *p = (int *)malloc(sizeof(int) *10) .实际上malloc主要是用于内置类型的申请和释放,对于对象的创建用malloc则不能满足要求,因为对象的创建要自动调用构造函数,对象在消亡之前要调用析构函数,用malloc/free是不能完成的,这种情况就要使用new/delete的组合了,应该注意的是new/delete是C++中的运算符。

    小弟才疏学浅只知道这些主要的区别啦,大牛们,赶快来补充吧~~~~come on !!!


    学习中的一点总结,欢迎拍砖哦^^


  • 相关阅读:
    [转]深入探析c# Socket
    [转]软件架构师书籍
    常指针类型讲解(const int *p,int*const p,int const *p,指针常量,常量指针)
    使用CreateFile()打开COM10及以上串口的问题[转并整理]
    如何在MFC中打开控制台[转]
    vb.net相关的除法运算
    计算机如何表示小数
    精简指令集与复杂指令集
    【转】ArcSDE数据被锁定后的解锁方法
    [ERR0134] Requested Service is not available【转载】
  • 原文地址:https://www.cnblogs.com/BeyondAnyTime/p/2646194.html
Copyright © 2020-2023  润新知