暂弃——2020.2.17
专心学前端
学习之前:
阅读方法:
每章至少读两遍;
1.第一遍:
逐字逐句把内容完整看一遍
认为重要的内容、不理解的概念、看不懂的逻辑等做好标记
2.第二遍:
学习内容的全面理解
注意三个概念:
概念。概念在不同类型的书里可能是不同的东西,比如公式、定理、定义、论点等。确保自己理解了每一个概念。
逻辑。概念是怎么来的,公式定理如何被证明和推导,概念之间存在怎样的关系。关键在于理解逻辑推导的思维过程。
例子。概念和逻辑如何被使用,很多人认为例子不属于干货,看概念就可以了。实际上例子可以有效地帮助理解概念。
正式笔记:
1.1
C++程序包括返回类型(return type)函数名(function name)括号内的形参列表(parameter list)及函数体(function body)
int main()
{
return 0;
}
1.2
iostream中的术语“流”想要表达的是,随着时间的推移,字符是顺序生成或消耗的
标准库定义了4个IO对象 cin(标准输入),cout(标准输出),cerr(输出警告和错误信息)和clog(程序运行时的一般性信息)
cin是读入,cout,cerr和clog都呈现在输出窗口中,
输出运算符(<<)
<<运算符接收两个运算对象,左侧的运算对象必须是一个ostream
cout<<"The sum of"<<v1;
输出语句使用了多次<<运算符,第一个运算符的结果成为了第二个运算符的左侧对象
等价于
(cout<<"The sum of")<<v1;
双引号包围的字符序列被称为字符串字面值常量
cout<<"The sum of"<<v1<<"and"<<v2<<"is"<<v1+v2<<endl;
等价于
cout<<"The sum of";
cout<<v1<<"and"<<v2<<"is"<<v1+v2<<endl;
其中这个endl为操纵符(manipulator),写入endl的效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中;缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正写入输出流中,不仅停留在内存中等待写入流。
前缀std:: 指出名字cout和endl是定义在名为std的命名空间中的,命名空间可以帮助我们避免不经意的名字定义冲突,以及使用库中相同名字导致的冲突,标准库定义的所有名字都在命名空间std中,
cin与cout相同,输入运算符返回其左侧对象作为其计算结果
注释:
注释界定符不能嵌套,最好使用双斜线的注释方法
while语句的形式为:
while(condition)
statement
1.4.1节练习
#include <iostream>
using namespace std;
int main(){
int a=10;
cout<<"0到10之间的整数";
while(a>0){
a--;
cout<<a<<endl;
}
}
注意“endl”的使用
for语句:
练习 1.14:对比for循环和while循环,两种形式的优缺点各是什么?
在for循环中,循环控制变量的初始化和修改都放在语句头部分,形式较简洁,且特别适用于循环次数已知的情况。
在while循环中,循环控制变量的初始化一般放在while语句之前,循环控制变量的修改一般放在循环体中,形式上不如for语句简洁,但它比较适用于循环次数不易预知的情况(用某一条件控制循环)。
两种形式各有优点,但它们在功能上是等价的,可以相互转换。
1.4.3 读取数量不定的输入数据
int main(){
int sum =0, value = 0;
while(cin>>value)
// 这里较一般的while循环不同
sum += value;
cout<< "Sum is:"<<sum<<endl;
return 0;
// 当我们运行程序后发现不论输入多少个数都不会停止。这个程序特殊之处在于while的判断停止条件为cin
}
也就是说若想让此程序成功运行则需在输入末尾加入a.文件结束符或b.无效的输出(如标点符号,或者不是一个整数时),判断条件会变为false,循环就结束
文件结束符为CTRL+Z
再探编译:
编译器的一部分工作是寻找程序文本中的错误。另一部分可以检查形式上的错误
1.语法错误 2.类型错误 3.声明错误
1.4.4 来统计在输入中每个值连续出现了多少次:
#include<iostream>
using namespace std;
int main()
{
// currVal是我们正在统计的数;我们将读入的新值存入val
int currVal = 0, val = 0;
// 读取第一个数,并确保确实有数据可以处理
if(cin>>currVal){
int cnt = 1; //保存我们正在处理的当前值的个数
while(cin>>val){ // 读取剩余的数
if(val == currVal) // 如果值相同
++cnt; // 将cnt加1
else{ // 否则,打印前一个值的个数
cout<< currVal << "occurs" << cnt << "times" << endl;
currVal = val; // 记住新值
cnt =1; // 重置计数器
}
} // while循环在这里结束
// 记住打印文件中最后一个值的个数
cout<< currVal << "occurs"<<cnt<<"times"<< endl;
}// 最外层的if语句在这里结束
return 0;
}
1.5 类简介
定义一个数据结构来表示销售数据,在C++ 中,通过定义一个类来定义自己的数据结构。一个类定义了一个类型,以及与其关联的一组操作,类机制是C++最重要的特性之一。
为了使用类,我们需要了解三件事情:
- 类名是什么?
- 在哪里定义的?
- 它支持什么操作?
对于书店程序来说,我们假定类名为 Sales_item, 头文件Sales_item.h中去定义这个类。
因此,为了使用标准库实施,我们必须包含相关的头文件。类似的,我们也需要使用头文件来访问为自己的应用程序所定义的类,通常使用.h作为头文件的后缀。
Sales_item类的作用是表示一本书的总销售额,售出册数和平均售价
我们不必关心它是如何实现的,只需知道类对象可以执行什么操作。
我们可以定义类类型的变量,可以写下如下语句
Sales_item item;
是想表达item是一个Sales_item类型的对象。我们通常将“一个Sales_item类型的对象”简单说成“一个Sales_item对象”,或更简单的“一个Sales_item”
一般而言,类的作者决定了类类型对象上可以使用的所有操作。当前,我们所知道的可以在Sale_item对象上执行的全部操作就是本节所列出的那些操作。
#include<iostream>
// 也可以用双引号包围
#include "Sales_item.h"
int main()
{
Sale_item book;
// 读入ISBN号、售出的册数以及销售价格(三个信息)
cin>> book;
// 写入ISBN、售出的册数、总销售额和平均价格(四个信息)
cout<< book<<endl;
return 0;
}
如果输入:
0-201-70353-X 4 24.99
则输出为:
0-201-70353-X 4 99.96 24.99
输入表示我们以每本24.99美元的价格售出了4册书,而输出告诉我们总售出册数为4,总销售额为99.96美元,而每册书的平均销售价格为24.99美元