第一章 : 开始


1.1 编写一个简单的C++程序

要点:每个函数有且只能拥有一个main函数,且main的默认返回是一个int类型。

函数定义:返回类型,函数名,形参列表,函数体

1.1.1编译 运行程序

程序源文件命名约定

无论使用命令行还是IDE(集成开发环境),都将代码存放在一个或多个文件中,这些文件就是源代码

编译

在某个控制窗口中编译程序(winsdows命令行linux命令行


1.2 初识输入输出

iostream库:

istream:输入流

ostream:输出流

PS:一个流就是一个字符序列,是从IO设备读出或写入IO设备的。流(stream)表达的是,随着时间的推移,字符是顺序生成或消耗的。

标准输入输出

cin:标准输入

cout:标准输出

cerr和clog:标准错误

cout与cerr的区别:

1.cout:经过缓冲后输出,默认情况下是显示器。这是一个被缓冲的输出,是标准输出,并且可以重新定向

2.cerr不经过缓冲而直接输出,一般用于迅速输出出错信息,是标准错误,默认情况下被关联到标准输出流,但它不被缓冲,也就说错误消息可以直接发送到显示器,而无需等到缓冲区或者新的换行符时,才被显示。一般情况下不被重定向

PS:缓冲区

实际代码例子

  1. #include<iostream>//头文件,一般在main外部
  2. using namespace std;//命名空间(namespace),通过使作用域运算符(::),来使用std空间的cout和cin
  3. int main()
  4. {
  5. int a,b;
  6. cout<<"Hello world"<<endl;//endl是操作符,作用是将与设备关联的缓冲区中的内容刷到设备中
  7. cin>>a>>b;
  8. cout<<"a*b="<<a*b;//多个语句能和成为一个语句
  9. return 0;
  10. }

向流中写入写出数据

"<<"(name:输出运算符):左侧的运算对象必须是ostream对象右侧对象为需要打印的值。它会将右侧的值给到ostream对象中。

">>"(name:输入运算符):左侧的运算对象必须是istream对象右侧对象为需要输入的值。它会将istream对象的值给到右侧对象中。

WARNING

程序员在调试时常常添加打印语句。这一类语句应该保证“一直”刷新流。否则,如果程序崩溃,输出还可能留在缓冲区中,从而导致关于程序崩溃位置的错误判断。


1.3 注释简介

C++中的注释的种类

1.当行注释(//),以双斜线开始,换行符结束,这种注释可以包含任何文本内容和额外的数据双斜线

2.界定符对注释(/* */),可以包含除后界定符的任意内容

注释界定符不能嵌套

  1. /*
  2. *注释对/* */不能嵌套
  3. *不能嵌套四个字会被认为是源码,
  4. *像剩余程序一样处理
  5. */
  6. int main
  7. {
  8. return 0;
  9. }

1.4 控制流

1.4.1 while语句

说明

while反复执行一段代码,直到给定条件为

执行过程是交替检测condition和执行关联语句statement,直到condition为假

  1. while(condition)
  2. statement

实例

从1~100的整数总和(复合赋值运算符

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int sum=0;
  6. int i=0;
  7. while(i<=100)
  8. {
  9. sum+=i;//使用了复合赋值运算符
  10. ++i;//前缀递增运算符
  11. }
  12. cout<<sum;
  13. return 0;
  14. }

1.4.2 for语句

说明

for循环与while循环相比,将检测变量 变量递增等进行了简化

  1. for(init-statement;condition;expression)
  2. principal

实例

从1~100的整数总和

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int sum=0;
  6. for(int i=0;i<=100;i++)
  7. sum+=i;
  8. cout<<sum;
  9. return 0;
  10. }

1.4.3 读取数量不定的输入数据

当不知道需要对多少数进行操作是,可以使用istream对象作为条件配合循环

当istream对象作为条件时,其效果就是检测流的状态。如果流是有效的,即检测成功。当遇到文件检测符,或者遇到无效输出时,istream对象的状态变为无效,处于无效状态的istream的对象,条件判断为假。

PS:文件检测符

1.Windows Ctrl+Z 后按Enter或Return

2.Unix and Mac OS X Ctrl+D

实例

计算输入整数的和

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int sum=0;
  6. int val=0;
  7. while (cin>>val)
  8. {
  9. sum+=val;
  10. }
  11. cout<<sum;
  12. return 0;
  13. }

1.4.4 if语句

if语句用来支持条件执行

  1. if(condition)
  2. principal_1
  3. else
  4. principal_2

实例

统计输入中每个值连续出现了了多少次

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int currval=0,val=0;
  6. if(cin>>currval)//读取第一个数
  7. {
  8. int cnt=1;//保存当前值的个数
  9. while (cin>>val)//读取剩余的数
  10. {
  11. if(currval==val)
  12. cnt++;
  13. else
  14. {
  15. cout<<currval<<" occurs"<<cnt<<" times"<<endl;
  16. currval=val;//记住新值
  17. cnt=1;//重置计数器
  18. }
  19. }
  20. cout<<currval<<" occurs"<<cnt<<" times"<<endl;//打印最后一个值的个数
  21. }
  22. return 0;
  23. }

输入:

  1. 42 42 42 42 42 55 62 100 100 100

输出:

  1. 42 occurs5 times
  2. 55 occurs1 times
  3. 62 occurs1 times
  4. 100 occurs3 times

PS:运算符


1.5 类简介

1.5.1 类

定义

在C++中,我们通过定义一个类(class)来定义自己的数据结构。

一个类定义了一个类型,以及与其关联的一组操作。

类机制是C++最重要的特性之一,C++的最初的一个设计焦点就是能定义使用上像内置类型一样自然的类类型(class type)

使用类时需要了解的事情:

1.类名是什么?

2.它是在哪里定义的?

3.它支持什么操作?

关键概念:类定义了行为

类的创作者在创造类时定义了类的对象能进行的所有操作,使用一个类创建了一个对象时,这个对像能进行的行为就已经确定了。

实例

Sales_items类

假设已经存在了一个Sales_items类,存放在Sales_items.h头文件

读写Sales_items

  1. #include<iostream>
  2. #include"Sales_item.h"//Sales_item类的相关操作都存放在这
  3. using namespace std;
  4. int main()
  5. {
  6. Sales_items book;
  7. cin>>book;//进行了运算符重载(后面的博客有详细讲解)
  8. //读入了ISBN号 售出的册数 销售价格
  9. cout<<book<<endl;
  10. //写入了ISBN号 售出的册数 总销售额 平均价格
  11. return 0;
  12. }

输入:

  1. 0-201-70353-X 4 24.99

输出:

  1. 0-201-70353-X 4 99.96 24.99

Sales_item 对象的加法

  1. #include<iostream>
  2. #include"Sales_item.h"
  3. using namespace std;
  4. int main()
  5. {
  6. Sales_items item1,item2;
  7. cin>>item1>>item2;
  8. cout<<item1+item2<<endl;//进行了运算符重载,换句话说此+非彼+,和整数的加法不同
  9. return 0;
  10. }

输入:

  1. 0-201-70353-X 3 20
  2. 0-201-70353-X 2 25

输出:

  1. 0-201-70353-X 5 110 22

1.5.2 成员函数

什么是成员函数(member function)

成员函数是定义为类的一部分的函数(类包含有成员函数),有时也称为方法(method)

实例

  1. #include<iostream>
  2. #include"Sales_item.h"
  3. using namespace std;
  4. int main()
  5. {
  6. Sales_item item1,item2;
  7. cin>>item1>>item2;
  8. //首先检查item1和item2是否为同一本书
  9. if(item1.isbn()==item2.isbn)
  10. {
  11. cout<<item1+item2<<endl;
  12. return 0;//表示成功
  13. }
  14. cout<<"error";
  15. return -1;//表示失败
  16. }

1.6 书店程序

我们需要从一个文件中读取销售记录,生成每本书的销售报告,显示售出册数 总销售额 平均售价。

假定书号相同的数据是聚集在一起的。

  1. #include<iostream>
  2. #include"Sales_item.h"
  3. using namespace std;
  4. int main()
  5. {
  6. Sales_item total;//保存和的变量
  7. //读入第一条交易记录,并确定有数据可以处理
  8. if(cin>>total)
  9. {
  10. Sales_item trans;//保存下一条记录的变量
  11. //读入并处理剩余交易记录
  12. while (cin>>trans)
  13. {
  14. //处理相同的书
  15. if(total.isbn==trans.isbn)
  16. total+=trans;//更新总销售额
  17. else
  18. {
  19. cout<<total<<endl;
  20. total=trans;//total现在变成下一本书的销售额
  21. }
  22. }
  23. cout<<total<<endl;//打印最后一本书的销售额
  24. }
  25. else
  26. {
  27. cout<<"No date?!"<<endl;//错误警告
  28. return -1;
  29. }
  30. return 0;
  31. }

特别鸣谢

xqy同学指导我使用了Editor.md,让这个系列可以进行更新(迈出了第一步)。

hyf同学在排版和内容等方面提出了十分重要的意见。

注:这个系列会长期的更新下去,希望我写的文章能对诸位有所帮助。

C++primer第一章的更多相关文章

  1. C++Primer 第一章

    /* 1.main函数的标准写法就只有两种,一种是带命令行的,一种是不带命令行的.其返回类型必须是int. 2.如果main函数最后没有return语句,则编译器会自动加上一句 return 0; * ...

  2. C++primer第一章(部分)

    1.4.2 for 语句 for (init-statement; condition; expression) statement; step1:初始化 step2:判断条件,为真则执行循体:为假则 ...

  3. <<C++ Primer>> 第一章 开始 术语表

    术语表 第 1 章 开始 参数(实参, argument): 向函数传递值    赋值(assignment): 抹去一个对象当前值一个新值取代之    缓冲区(buffer): 一个存储区域, 用于 ...

  4. C++ Primer 笔记 第一章

    C++ Primer 学习笔记 第一章 快速入门 1.1 main函数 系统通过调用main函数来执行程序,并通过main函数的返回值确定程序是否成功执行完毕.通常返回0值表明程序成功执行完毕: ma ...

  5. 《C++Primer》第五版习题答案--第一章【学习笔记】

    C++Primer第五版习题解答---第一章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2022/1/7 第一章:开始 练习1.3 #includ ...

  6. C++ Primer Plus 第一章 预备知识

    C++ Primer Plus 第一章 预备知识 知识点梳理 本章主要讲述了C++的由来,讨论了面向过程语言与面向对象语言的区别,介绍了ANSI/ISO制定的C++标准,阐述了在Windows.Mac ...

  7. C++PRIMER第五版练习题答案第一章

    C++PRIMER第五版练习题答案第一章 应该有很多小伙伴和我一样,闲来无事买了本C++的书自己啃,课后的练习题做的很揪心,这里我分享下我写的答案,希望能帮助到你,提供源码,就不跑了哈,毕竟现在是第一 ...

  8. C++ primer的第一章的主要内容

    第一章主要是把C++的主要的部分简单的介绍了一下,让读者对C++开始有一个简单的了解.看完第一章的收获就是知道如何去读入不确定数目的输入,主要是形式是:whlie(cin>>s){},利用 ...

  9. 第一章 C++ primer Plus

    第一章 1.4程序创建的技巧 大体如下: 1.使用文本编辑器编写程序,并将其保存到文件中,这个文件就是程序的源代码. 2.编译源代码.这意味着运行一个程序,将源代码翻译为主机使用的内部语言——机器语言 ...

随机推荐

  1. ubantu系统之安装notepadqq

    Ubuntu下的安装方法:     sudo add-apt-repository ppa:notepadqq-team/notepadqq     sudo apt-get update     s ...

  2. js判断输入数字是否是整数,金额、数字

    function isIntNum(strNum){//js判断输入数字是否是整数 仅供学习思想 var strCheckNum = strNum+""; if(strCheckN ...

  3. js判断json数据是否存在某字段的方法

    方式一 !("key" in obj) if("name" in json){//json就是数组,name是你要找的值 console.log("有 ...

  4. px,rem,em 通过媒体查询统一的代码

    @media only screen and (max-width: 1080px), only screen and (max-device-width:1080px) { html,body { ...

  5. Vue踩坑1——驼峰命名

    使用自定义Vue组件的时候,其他个方面都正常,但是浏览器就是显示不出自定义标签里的内容 <!DOCTYPE html> <html lang="en"> & ...

  6. Java学习day21

    今天学习了弹窗,除了此前学的按键以外,弹窗也是程序中广泛使用到的一个方面 做了一个简单的弹窗 除了按键以外,有时候我们需要在界面上显示更多的内容,甚至是图片等,这个时候就需要使用到标签 通过标签和Ic ...

  7. 1903021116-吉琛- JAVA第二周作业—Java程序编写

    项目 内容 课程班级博客链接 19级信计班 这个作业要求链接 https://www.cnblogs.com/thelovelybugfly/p/9641367.html 我的课程学习目标 1. 学习 ...

  8. 2021.07.26 P1010 幂次方(数论)

    2021.07.26 P1010 幂次方(数论) [P1010 NOIP1998 普及组] 幂次方 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.二进制 题意: 用20 ...

  9. vscode无法运行和调试使用了部分stl库的程序(无法定位程序输入点__gxx_personality_v0的一个解决方法)

    一.起因 vscode 不能运行带有部分 stl 库的程序,编译不会报错,运行也不会报错但是也没有结果,调试的话会有下图中报错,如果没有string或者vector一切正常. 二.分析  cmd 中运 ...

  10. Microsoft Graph 的 .NET 6 之旅

    这是一篇发布在dotnet 团队博客上由微软Graph首席软件工程师 Joao Paiva写的文章,原文地址: https://devblogs.microsoft.com/dotnet/micros ...