从C到C++,C语言与C++的区别详解

一.从C到C++:

C++是C的增强
(1)新增自定义的类型转换
    C语言:
        实现基本数据类型的转换
        对于非基本的数据类型转换,不能实现转换
    C++:
        实现基本数据类型的转换
        实现自定义类型的转换,例如:类类型的转换
(2)严格的数据类型检查
    C++是一门静态型语言,如果程序有错误,在编译阶段就会将错误提出来
例如:
    C语言:  说明C语言的类型检查不是很严格
        const int a=10  ;  //a的值是不能被改变  
        a=20  ;   //报错
    错误:
        test1.c:6:3: error: assignment of read-only variable ‘a’6 |  a=20;|   ^
    警告:
    test1.c:7:9: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
    7 |  int *p=&a;
      |         ^
    C++语言:
        const int a=10;
        a=20;
    错误:
        text.cpp:6:3: error: assignment of read-only variable ‘a’6 |  a=20;|  ~^~~
        
    错误:
        text.cpp:6:9: error: invalid conversion from ‘const int*’ to ‘int*’ [-fpermissive]
 6 |  int *p=&a;
      |         ^~
      |         |
      |         const int*

(3)新增变量引用
    引用:
        符号:&
    解释:
        引用实质上是给已经存在的变量取一个别名
    使用:
        格式:
            数据类型  & 别名=已经存在的变量名 ;  //数据类型:基本数据类型(int ,char),自定义类型:类类型
        例如:
            int b=20;
            int   &  a = b;   //给存在的变量b取一个别名a

错误:
    text.cpp:7:7: error: ‘b’ declared as reference but not initialized   //引用变量b未初始化
    7 |  int &b;
      |  
注:
    (1)编译器不会给引用变量另外开辟空间
    (2)引用类型的变量一旦存在必须对其进行初始化工作
    (3)引用类型的变量必须与一个已经存在的变量进行绑定

练习:
    实现两个数的交换,要采用多种值传递的方式实现(函数参数值传递)
    
    #################面试题:指针和引用有什么区别?####################

(4)新增函数带默认值参数
    函数中的参数在声明的时候带了一个默认值
格式:
    函数返回值  函数名(参数1 , 数据类型  标识符=初始值)
    {

    }
例如:
    void   function(int a , int b=20) //参数b带默认值
    {
        
    }
如何调用带默认值的函数?
    (1)不更新默认值的形式调用
        例如:
            function(40) //正确    
    (2)更新默认值的形式调用
        例如:
            function(40,30);//正确
注意:
text.cpp:32:29: error: default argument missing for parameter 2 of ‘void function1(int, int)’
   32 | void function1(int a=20,int b)   //写法上,要将不带默认值的参数放在带默认值的参数前
      |                         ~~~~^

(5)新增了函数重载以及运算符重载
运算符重载:

运算符重载与函数重载比较类似,相当于让一个运算符具有另外一种含义;

运算符重载的本质是一个函数,是从函数一步步演绎而来;

c++编译器如何支持操作符重载机制: 本质是函数重载,根据运算符前后的数据类型调用对应的函数;

函数重载:
    是指函数名相同,函数的参数类型或参数个数或参数的顺序不同,即可发生函数重载
C语言:
    函数重载报错:
    test1.c:6:6: error: conflicting types for ‘func’
    6 | void func(char a)
      |      ^~~~
    test1.c:3:6: note: previous definition of ‘func’ was here
    3 | void func(int a)
C++语言:
    支持函数重载
注意:
    函数重载与函数返回值无关
    练习:
        有一个同名函数,实现的功能是不同类型的数据进行交换
内联函数:
    声明:
        关键字:inline    //用于声明一个函数是内联函数

    格式:
        inline  函数返回值  函数名 (参数列表)
        {

        }
    例如:
        inline   void  function()
        {

        }
内联函数的使用:
    针对使用频度高的代码,且短小精简
    提高了编译器的执行效率


(6)新增了智能指针
    作用是防止内存泄露,即将用户用裸指针开辟的堆空间的权利交给智能指针去管理


(7)新增了异常处理机制
    C++可以主动产生异常,也可以主动捕获异常并处理
................
 

二.C语言与C++的区别:

编程思想上:
    C语言:面向过程的语言,侧重点是在于过程
    C++:既面向过程也面向对象,C++的侧重点是在于对象
        面向对象编程:
            将一切事物看成是对象,一切皆对象
从使用上:
    C++是C的增强        
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值