设为首页收藏本站
查看: 500|回复: 4

1.《剑指C++》之从C到C++(1)

[复制链接]
  • TA的每日心情
    擦汗
    昨天 08:01
  • 签到天数: 760 天

    [LV.10]以坛为家III

    发表于 2020-6-6 12:10:23 | 显示全部楼层 |阅读模式
    本帖最后由 御天行 于 2020-6-16 14:04 编辑

    剑指C++系列目录(更新中)

    从C到C++(本章为从C到C++的过渡篇)













    =====================================目录与废话的分割线============================================

    上次搞完那个《C进阶系列》,决定趁热打铁,再整理出一套关于C++的专题。本系列依旧会以王桂林老师的C++课程及《C++基础与提高第4版》作为蓝本(后期也会结合其他大师的著作对本系列进行优化)。尽量以通俗易懂的语言深入浅出地为学习过C++的同学,分享一下关于C++ 的那些事儿。
    本课程所需要的基础:具备良好的C语言基础(最好能对指针有一些较为深入的了解)。
    关于本系列的课程推荐:
    B站搜索关键字“王桂林”即能找到相关的视频教程(这里给王老师打个小广告,老王的C/C++系列是我这么多年来遇到过最好的C/C++课程,没有之一,相见恨晚呀!)
    如果被和谐了,也可以看筱白昨天发的这可能是你见过“最牛*”的C++课程,(虽然这个压缩包大一点,还是建议先收藏,防止B站的被和谐)
    好了,废话不多说,开始进入正文。
    =====================================废话与正文的分割线============================================

    如无特殊说明,本系列的所有代码运行环境均基于qt5.9.9

    1.更严格的类型检查
    在之前的《C进阶》中曾提到,C语言中的const,并非真正的const。假设我们定义了一个int const a的变量,虽然不能直接通过赋值来改变a的值,但是可以通过指针间接改变a的值。而在C++中,则不允许这种“间接改变const值”的做法,如下:
    1. //分别在C和C++编译环境下执行以下代码
    2. const int a=10;
    3. int *p=&a;
    4. *p=20;
    复制代码

    如图:



    由运行结果可知,在C编译环境下会产生warning,而在C++编译环境下,则会直接error
    在编译器中warning是可以被忽略而产生可执行文件的,而error则不允许被忽略,无法产生可执行文件,因此C++的语法比C更加严格,既然是const,则无论如何也不允许被改变。

    2.逻辑类型bool
    C语言中没有逻辑类型,C中的逻辑真假,用0(假)和非0(真)来表示。而在C++中,则有了专门用来表示真假的逻辑类型,即bool类型,bool类型有两种:true(真)和false(假),从本质上来看,仍旧是一个char类型的变量,可被0和非0的数据赋值。
    注意:在王桂林老师的《C++基础与提高--第四版》中,第6页下面写的是:C中的逻辑的真假,用0表示逻辑真,而非0来表示逻辑的假。个人认为:这句话是一处小小的错误。实际上,while(1)中的代码是可以被执行的,而while(0)中的代码是不能被执行的。这表明,在C/C++的逻辑判断中,非0的时候表示真,0则表示假。

    bool类型的基本应用:(逻辑判断操作)
    1. #include <iostream>
    2. using namespace std;

    3. int main(void){

    4.    bool flag=true;

    5.    if(flag){

    6.        cout<<"Hellow Honker!"<<endl;
    7.    }

    8.    else{
    9.        cout<<"flase"<<endl;
    10.    }

    11.    return 0;
    12. }
    复制代码


    实验1:求bool类型的大小及对bool类型进行数值赋值操作
    1. #include <iostream>
    2. using namespace std;

    3. int main(void){

    4.    bool flag=true;

    5.    bool flag1=false;

    6.    cout<<"flag="<<flag<<endl;
    7.    cout<<"flag1="<<flag1<<endl;

    8.    flag=12;//将flag赋值为一个非0的数值
    9.    flag1=8;//将flag1赋值为一个非0的数值

    10.    cout<<"flag="<<flag<<endl;
    11.    cout<<"flag1="<<flag1<<endl;

    12.    flag=0;//将flag赋值为0
    13.    flag1=0;//将flag1赋值为0

    14.    cout<<"flag="<<flag<<endl;
    15.    cout<<"flag1="<<flag1<<endl;

    16.    return 0;
    17. }
    复制代码

    运行结果如下:

    由实验可知,bool类型所占的空间为1个字节(即一个char多占空间的大小),且对bool类型的变量进行数字赋值时,凡是赋值为非0的数字(无论正负),都会被自动转化为1(表示真)。

    3.真正的枚举
    C语言中的枚举元素类型,本质上就是整形,枚举变量可以用任意整形赋值。而C++中枚举变量,只能用被枚举出来的元素赋值。如下程序,在C语言中编译是没有问题的,而在C++中,则会出现error:
    1. int main()
    2. {
    3.     enum season{spr,sum,aut,win};
    4.    
    5.     enum season s=spr;
    6.     s=10;

    7.     return 0;
    8. }
    复制代码


    4.可被赋值的表达式
    C语言中表达式通常不能作为左值的,即不可被赋值;但在C++中某些(并非是全部)表达式是可以赋值的。
    1. int main(void){

    2.     int a,b=5;
    3.     (a=b)=10;
    4.     cout<<"a="<<a<<endl<<"b="<<b<<endl;

    5.     (a<b?a:b)=200;
    6.     cout<<"a="<<a<<endl<<"b="<<b<<endl;

    7.     return 0;
    8. }
    复制代码

    运行结果如图:

    在C语言中(a = b) = 10;(a<b? a:b) = 200; 这种语句是完全编译不过的,但在C++中编译却是可以通过的。

    下一篇:2.C++中的标准输入与输出

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x

    点评

    我想说的是,你的教程一点也不循序渐进,知识点跳的太快.  发表于 2020-6-16 13:36
    谢谢楼主分享,希望楼主可以坚持下去  发表于 2020-6-12 19:29
    欸,又有一个C++教程,那我的教程还更不更?  发表于 2020-6-7 14:49
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    站长推荐 上一条 /3 下一条

    红盟社区--中国红客联盟 

    Processed in 0.089890 second(s), 19 queries.

    站点统计| 举报| Archiver| 手机版| 黑屋 |   

    Powered by HUC © 2001-2017 Comsenz Inc.

    手机扫我进入移动触屏客户端

    关注我们可获取更多热点资讯

    Honor accompaniments. theme macfee

    快速回复 返回顶部 返回列表