第一章:开始
编写一个简单的程序
函数
:包含4部分:返回类型,函数名,形参列表,函数体。其中函数体是一个语句块。main函数
:每个cpp程序都有且仅有一个main,os通过调用main来运行程序。main函数的返回类型必须为int,被用于指示状态,0表示成功返回,非0值由系统定义,常用于指出错误类型。类型
:一种类型不仅定义了数据元素的内容,还定义了这类数据上可进行的操作。即:类型=内容+操作
编译、运行程序
后缀
:C++源文件的常见后缀名包括:.cc
.cxx
.cpp
.cp
.C
执行
:unix中可执行文件的名称任意,执行时输入完整文件名。windows中可执行文件后缀为.exe
,执行时不需输入.exe
查看返回值
:可在程序执行完后用echo查看main函数返回值,unix中用echo $?
,windows中用echo %ERRORLEVEL%
GNU编译
:g++ -o prog1 prog1.cc
,其中-o prog1
指定输出文件名,未指定时为a.out
。另外可用-std=c++11
来开启C++ 11VS编译
:cl /EHsc prog1.cpp
,其中/EHsc
是编译器选项,用于打开标准异常处理。VS生成的可执行文件名与第一个源文件名相同,后缀为.exe
开启warning
:GCC中用-Wall
,VS中用/W4
初识输入输出
- 在标准库
iostream
中提供IO机制 2个基础IO类型
:istream
和ostream
,分别是输入流和输出流,一个流是一个字符序列4个IO对象
:标准输入cin
,标准输出cout
,标准错误cerr
,一般信息clog
,系统经常将程序运行的窗口与这些对象关联,即这些对象与程序运行的窗口交互头文件
:使用标准库的设施都应用#include
来包含相关头文件,通常#include
必须出现在所有函数之外表达式
:一个表达式产生一个计算结果,它由一个或多个运算对象
和一个或多个运算符
组成输出运算符<<
:接受两个对象,左侧一个ostream对象,右侧是要打印的值。此运算符将右侧对象的值写入左侧ostream对象中,返回左侧ostream对象,级联时从左到右结合。因此级联时,同一个ostream对象被从左到右的一系列«操作,即从左到右输出值。操纵符endl
:写入此操纵符的效果是结束当前行,并刷新缓冲区
,即,将与设备关联的缓冲区中的内容刷到设备中。若不手动刷新,则需等到缓冲区满才会自动刷新,所以建议调试时每一步都使用endl手动刷新(比较耗时)命名空间
:帮助避免名字冲突,标准库定义的所有名字都在std
中作用域运算符::
:用std::cout
来指定命名空间std中的cout名字初始化
:初始化一个变量,就是在变量创建的同时为其赋值。输入运算符>>
:接受两个对象,左侧一个istream对象,右侧是要被写入的变量。此运算符从左侧istream对象中读入数据,存入右侧对象中,返回左侧istream对象,级联时从左到右结合。因此级联时从同一个istream对象中连续读入数据,依次放入从左往右的对象中。运算符重载
:例如int v; std::cout<<"value is "<<v<<std::endl;
的代码,三个<<
处理的对象类型不一样,是不同的运算符。标准库定义了不同类型的运算符来处理不同类型的对象,遇到匹配的时自动选择。
注释简介
- 有两种注释:单行注释
//
和界定符对注释/* */
- 界定符对跨越多行时,最好显式指出内部行属于多行注释,风格是每行一个星号开头,例如:
|
|
- 单行注释以双斜线
//
开始,以换行符结束,可进行单行或半行注释,注释内容可包含任何文本包括重复的双斜线 - 界定符对注释不能嵌套,(所以调试时最好用单行注释)
控制流
while语句
while
先判断后执行,do...while
先执行后判断条件
是一个返回真或假的表达式语句块
是语句的一种,任何可使用语句的地方都可用语句块i++和++i的区别
:i++在语句执行后对i自增,++i在语句执行前对i自增。另外,从运行速度来讲,由于i++返回i的值,而++i返回i的引用,所以对于类类型,++i更快。
for语句
- for循环头中声明的变量,只在循环头和循环体中有效
for循环头
:一个初始化语句;一个循环条件;一个表达式- for和while都是先判断后执行
- 每一次都是循环体执行完后再执行循环头中的表达式
读取数量不定的输入数据
- 用while实现,当istream对象作为条件时,只要流是有效的,就返回true
- 当遇到
EOF
,或从流中读到的数据无法转为右侧对象时,流变为无效 手动输入EOF
:unix中用ctrl+d
,windows中用ctrl+z
然后enter
编译器能检查出的错误
:语法错误(syntax error),类型错误(type error),声明错误(declaration error)debug好习惯
:按照报错的顺序修改,每修改一个就立即重新编译
if语句
- 注意
=
和==
的返回值都能作为真假被if接受
类简介
- 一个类定义了一个类型,以及与其关联的一组操作
- 习惯上,头文件根据其中定义的类的名字来命名
- 头文件的后缀通常为
.h
.H
.hpp
.hxx
,标准库的头文件通常不带后缀。编译器一般不关心头文件名的形式。
Sales_item类
- 包含来自标准库的头文件时应用尖括号
<>
,不属于标准库的头文件用双引号""
文件重定向
:大多数系统都可用a.out <infile >outfile
来将infile内容作为标准输入,并将标准输出写入到outfile
初识成员函数
成员函数
是定义为类的一部分的函数,有时也被称为方法
- 点运算符只能用于类类型的对象,其左侧是类类型的对象,右侧是该对象的一个成员名
调用运算符()
用于调用一个函数