(仅供自我学习用)C++学习记录-1

        本学习记录的课程来源为Cherno的C++课程,以及用书籍C++ Primer Plus(之后书名就简称为CPP~)作为辅助。

        不过该学习计划还有待改进,先看这么学下来1个月之后效果如何。在开始着手C++学习时,我蜻蜓点水式地看了一部分的网课引言以及教辅资料,现在暂时将自己认为重要的几点归纳在该文章下面:

  1. 预备知识:c和c++;面向对象编程(OOP)和过程化编程;泛型编程;C++的集成开发环境(IDE)
  2. C++是如何工作的:以“Hello World!”输出的小程序为切入口。

目录

1. 预备知识

 2.C++是如何工作的

(1)解读Hello World代码

(2)编译设置

(3)进行编译

       编译 != 调试

       输出界面 和 错误列表界面

(4)编译结果

(5) 有多个cpp文件时的编译和连接


1. 预备知识

        这部分内容是从CPP那本书里学的。以小甲鱼《C++快速入门》系列视频的第一节作为辅助。个人认为这部分概念在现在了解即可,在后期对C++有大体了解之后再来进一步巩固这些概念会更好。现在我先把主要知识点列举如下(之后回来补坑):

  1. C++如何从C演变过来
  2. 面向对象编程(OOP)和过程化编程——世界企业对在各国分公司的分而治之,白手起家的大老板对员工的各种工作都要亲力亲为
  3. 泛型编程
  4. 集成开发环境(IDE)

 2.C++是如何工作的

         来自Cherno课程的第五讲。大概讲解了c++代码里的主要组成部分,以及c++文件如何进行编译和连接的。

(1)解读Hello World代码

        先看hello world的文件:设置项目名称为“L5_Helloworld”,在内部新建cpp文件"main.cpp",在内部写输出Hello World! 的代码。首先对代码各部分有初步了解:

 (1)第一行:

        #代表着预处理,编译器会在实际编译之前就把这些代码给处理掉。

        include指包含头文件,即将需要的头文件应用过来。

        <iostream>是一个头文件名,这个头文件里包含了我们需要的被调用函数的功能(输入输出流对象?cout, cin)。

(2)第三行

        int main( ) { } 设置了一个主函数。主函数是程序的起点和终点,有且仅有一个。int定义的是main函数的返回值为整型。不过对于main函数,其最后可以不用返回值(不用return,系统会默认主函数返回0),除了主函数以外的其他函数都必须要有返回值

(3)第四行及以后

        << 重载运算符,可以理解为一个函数(还是不清楚)。对该行代码可以这么理解:通过<<将字符串“Hello World!” 推送到cout流中,打印到终端,之后再用endl来结束并跳到下一行

        之后的函数cin.get()大有来头(对于我这个菜鸡来说)。cin.get(输入字符串), or cin.get( ),它会有不同的功能。以后讲函数的时候细说。

(2)编译设置

        在代码写完后,将由编译器将我们的代码转化成机器执行的指令操作。在VS的菜单栏中,有两个重要的下选栏:

 解决方案平台:在c++里有x32(电脑32位)和x64。在JAVA等编译器里,或许还能调成Android等。在此不细讲,需要时百度。

解决方案配置:有Debug和Release两个版本。简言之,Release会对完成完整的程序做出大量优化,运行速度更快;而Debug更适合编写进程中检查程序错误,运行速度更慢

在右击项目文件名(“L5_Helloworld”),点击“属性”后,我们还可以进一步调整环境:

        配置类型选择为".exe",这样编译器就会将代码转换为二进制文本文件(下节课会进一步浏览二进制文本文件里有什么,以及这个属性页更多配置的作用)

        

 编译器仅会将扩展名为 ".cpp" 的文件编译为 ".obj" 的文件,存放在test1文件夹里的Debug文件夹中。而后通过链接 (link) 将所有.obj文件连接起来组成.exe文件。

(3)进行编译

        编译的快捷键是 ctrl+f7

       编译 != 调试

        这里有必要给自己扫盲一下,编译和调试是有区别的编译是在程序运行前来检测错误的;调试是在程序运行过程中,根据运行状况检查错误。程序要先编译,生成了.exe文件后,才可以进行调试。

        输出界面 和 错误列表界面

        一般查错,建议看输出界面,少看错误列表(因为可能显示不全)。

(4)编译结果

在进行编译之后,打开HelloWorld文件所在文件夹,再在里面的Debug文件夹中找到main.obj(搜索方法详见cherno第五课12min左右),这就是编译之后产生的。

再将main.cpp里的代码进行调试后(开始link每个obj),就会产生main.exe文件(这个文件路径有点怪,在x64文件夹的Debug文件夹里;详见视频)。

双击exe就可以看见运行的“小程序”了。

(5) 有多个cpp文件时的编译和连接

        假设我们将main函数里的输出功能另写为一个函数log:

        然后新建一个Log.cpp来存放log函数。

        *为了保证主函数在运行时可以成功调用Log函数(不要因为Log在另外一个cpp里就找不到它了——否则会产生Link error),我们需要在main函数中申明该函数。 

这就可以运行了

        观察这个实验,为什么在main函数里申明一下,它就可以找到Log文件在哪了呢?毕竟main.cpp只能编译自己文件里有的代码,而Log.cpp并不在它的文件内。

        *这一切就是Link(链接)的功劳——将每个cpp文件连接起来了。link的作用在后期课程还会进一步再讲。

         *(这段话再次总结重申了编译器和连接器的大体运作。)最后再看看Debug文件夹,我们会找到2个obj文件——编译器会为每个源代码分别生成各自的obj文件。而链接器又会将每个obj文件连接起来,形成最终的二进制文件(.exe)。exe在另一个Debug文件夹里面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值