1.1 C++开始

风格约定:

橙色字体:固定名词

红色字体:重要

挖坑:目前没有理解,之后理解了再补充

1)加粗字体:小标题

重要概念或理论

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

如下式一个简单的main函数,功能是返回给操作系统一个值:

//程序1.1.0
int main()
{
    return 0;
}
  • C++程序均包含一个或多个函数,其中必须有一个main函数,系统通过调用main函数来运行C++程序。
  • 一个函数的定义包括四个部分:返回类型函数名,括号包括的形参列表以及花括号包含的函数体。如程序1.1.0中,返回类型为int,函数名为main,形参列表为空,函数体为return 0;
  • int类型是一种内置类型:即语言自己定义的类型
  • return函数:它结束函数的执行,并向调用者(可以使其他函数或者系统)返回一个值。其返回值的类型必须与函数返回类型相同
  • 多数系统中,main的返回值用于指示状态,0表示成功,非0由各个系统定义。

重要概念:类型

程序处理的数据保存在变量中,每个变量都有对应的类型。类型定义了数据元素的内容以及可以在该数据元素上进行的运算。

 1.1.1编译、运行程序

自行选择编译器,我是入了CLion坑。

编译器能够提示的错误:

  • 语法错误
  • 数据类型错误(不匹配)
  • 声明错误:C++中任何变量都要先声明后使用

1.2输入输出

1)C++输入输出机制

C++没有定义输入输出语句,而是采用了标准库iostream来提供IO机制。标准库iostream包含了输入流istream输出流ostream两个类型。

一个就是一个字符序列,其想要表达的是随着时间的推移,字符是顺序生成或消耗的。

2)C++标准输入输出

  • 标准输入cin:istream类型对象,关联标准输入,用于程序的正常输入
  • 标准输出cout:ostream类型对象,关联标准输出,用于程序的正常输出
  • 错误错误cerr:ostream类型对象,关联到标准错误,使用cerr输出的数据是不经过缓冲的,会立刻输出。用于输出错误信息或者警告信息
  • clog:ostream类型对象,关联到标准错误,写入到clog的数据是要缓冲的,一般用于报告程序的执行信息,写入日志中。

3)IO库例程

#include <iostream>

int main() {
    std::cout << "Enter two number:" << std::endl;
    int v1 = 0,v2 = 0;
    std::cin >> v1 >> v2;
    std::cout << "The sum of " << v1 << " "<< "and" << v2 << "is" << v1+v2 << std::endl;
    std::clog << "The program is end" << std::endl;
    std::cerr << "no error happend" << std::endl;

}

程序输出:

  • #include <iostream>作用是告诉编译器我们要使用iostream库。尖括号中的名字指出了一个头文件,通常程序所有的#include指令写在程序的最前面。
  • std::cout表示我们这里使用的cout是定义在名为std的命名空间中的,这有效避免了不同命名空间中相同名字的冲突。其中,::为作用域运算符。指定名字在特定空间的格式为namespace::name。

4)向流写入数据

std::cout << "Enter two number:" << std::endl;
  • 向流写入数据的理解是将程序中的数据写入到流中,再输出给IO设备。
  • 该语句是执行了一个表达式。C++中,表达式由一个或多个运算对象和(通常是)一个运算符组成,是最小的计算单元。
  • 该表达式中,<<为输出运算符,其左侧运算对象应为ostream对象,其右侧运算对象为要打印的值。输出运算符将右侧给定的值写入左侧的对象中,计算结果为写入了给定值的ostream对象。
  • 针对该表达式,第一个输出运算符的结果成为了第二个输出运算符的左侧对象,即该表达式相当于:
(std::cout << "Enter two number:" ) << std::endl;
  • 第二个输出运算符的右侧对象std::endl为一个操作符。其作用是结束当前行(即换行),然后将设备缓冲区(buffer)中的内容刷新到设备中。在调试程序时,时刻保持buffer中的内容刷新到设备中是至关重要的,程序正常运行无所谓,但程序崩溃时可能输出还停留在buffer中,从而造成错误分析不正确。

5)从流读取数据

 std::cin >> v1 >> v2;
  • 从流读取数据是从IO设备中读取数据到程序中
  • 该表达式中的>>为输入运算符,他的左侧对象为istream对象,他从左侧给定的istream对象读取数据,存到右侧对象中,最后返回左侧istream对象作为其计算结果。
  • 该表达式中,第一个输入运算符的计算结果作为第二个输入运算符的左侧istream对象,因此该表达式的含义是读入两个值,将第一个值存入v1,将第二个值存入v2。

1.3注释简介

C++中共有单行注释界定符注释两种注释方法。

1)单行注释//

//这是一个单行注释
单行注释可以注释额外的“/”符号
  • 单行注释以//开始,以换行符结束,能够注释一行 

2)界定符注释/**/

/*这是
 *界定符
 *注释的
 *标准格式
 */
  • 界定符注释以/*开始,以*/结束,会注释掉包含在/*与*/之间的所有内容。
  • 注释内的每一行都使用*开头,以表明这是注释的一部分
  • 界定符注释不可以嵌套,这会使系统报出难以理解的错误,一般容易发生在调试程序时,想注释一段程序,但里面的某一段已经被注释了。因此,现在编译器的多行注释快捷方式大多是使用的是多个单行注释组合。
/*我是注释/*这样嵌套注释是禁止的*/我是注释*/
/*我是注释/*我是注释*/
/*我是注释*/我是注释*/
/*我是注释*//*我是注释*/
/*我是注释/*我是注释/*我是注释*/我是注释/*我是注释*//*我是注释*//*我是注释*/
  • 真要有接界定符注释嵌套,从左侧第一个/*开始向后找到第一个*/为一组注释;从右侧第一个*/开始往前找到第一个/*为一组注释。

1.4控制流

一般程序是顺序执行的,但C++提供了多种不同的控制流语句,用于让程序按照更复杂的路径执行。包括:while语句,for语句,if语句

1.4.1while语句

#include <iostream>
int main() {
    int num = 0,val = 1;
    while(val <= 10){
        num += val;
        ++val;
    }
    std::cout << "The sum of 1 to 10 is " << num << std::endl;
    return 0;
}
  • while语句首先判断()中的条件condition是否为真,如果为真,则执行{}内的语句statement,执行完毕后再次检查()的条件是否为真,如果为真,则再次执行{}内语句,直至条件为假。
  • <=为小于等于运算符,其左侧对象小于等于右侧对象时返回真,否则返回假。
  • +=为复合赋值运算符,其将左侧与右侧的对象相加,并将结果保存到左侧中。a += b;等效于a = a + b;
  • ++为前缀递增运算符时,其对象在运算符的右侧,含义是将其右侧的对象值加1
  • --为前缀递减运算符时,其对象在运算符的右侧,含义是将其右侧的对象值减1
  • i++和++i区别
  • while语句使用格式为:
while(condition){
    statement
}

1.4.2for语句

#include <iostream>
int main() {
    int num = 0;
    for(int val = 1; val <= 10; ++val)
    {
        num += val;
    }
    std::cout << num << std::endl;
    return 0;
}
  • for语句的格式如下。上面程序中int val =1为初始化语句;val <= 10 为循环条件;++val为表达式。
for(初始化语句;循环条件;表达式){
    statement
}
  • for语句的优势在于给定循环次数时候做循环次数控制;而while语句的优势在于根据某个表达式的真假来确定循环是否执行
  • for语句是在函数体都完成后在进行表达式操作,然后在判断循环条件。以for(i=0,i<5;i++)为例,当i=1时,符合条件,执行函数体,函数体执行完了之后在进行i++,使得i=2,然后判读是否满足i< 5,满足的话执行下一次循环。而while(i<5)的循环语句会在每次循环开始前判断一下i<5 是否满足,而i++的操作可以在任意地方进行。

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

#include <iostream>
int main() {
    int num1 = 0, num2 = 0;
    std::cout << "Enter the num:" << std::endl;
    while(std::cin >> num2)
    {
        num1 += num2;
    }
    std::cout << num1 << std::endl;
    return 0;
}
  • 这里循环条件是std::cin >> num2;当使用一个istream对象作为条件时候,判断其真假就是在检测流的状态。如果输入是有效的(这里有效情况是输入一个整数),则流有效,状态为真。如果输入是无效的(例如输入的不是整数,不满足num2的类型)或者输入的是文件结束符(end-to-file),则流无效,状态为假。
  • 不同系统中文件结束符的输入方式不一样,按照书上说WIN下是Ctrl+Z;Ubuntu下是Ctrl+D。实测WIN10下也是Ctrl+D。

1.4.4 if-else语句

#include <iostream>
int main() {
    int num1 = 0;
    std::cin >> num1;
    if(num1 > 5){
        std::cout << "The num > 5" << std::endl;
    }
    else{
        std::cout << "The num < 5" << std::endl;
    }
    return 0;
}
  • if-else语句格式:
if(condition){
    statement1
}
else{
    statement2
}

当condition为真时,执行statement1;当condition为假时,执行statement2.

1.5类简介

C++中类的作用:C++中通过定义一个类,定义了一种数据结构,以及与之相关的全部操作。是C++的核心特性之一。每一个类都应以了一种新的类型,其类型名就是类名。

类的引用:一般通过头文件访问自己定义的类。头文件的命名一般以“类名.h”命名。也有用.hpp和.hxx结尾的。编译器对头文件的后缀没有要求,但一些IDE对头文件的后缀有要求。

当调用标准库时候:

#include <标准库名头文件明>

当调用非标准库时候:

#include “头文件名”

文件重定向:(待测试)

测试程序时,我们可以利用系统重定向功能代替键盘输入读入数据,并输出数据到指定文件中,方法如下:

1)首先生成可执行文件addItems.exe

2)将输入文件infile和输出文件outfile与可执行文件放在一个文件夹内

3)在当前文件夹打开终端运行

$ addItems <infile>outfile

其中,addItems,infile和outfile都应和可执行文件,输入文件,输出文件名称保持一致。

成员函数的调用

Sales_item.isbn()
  • 成员函数(方法):成员函数是定义的类的一部分函数
  • 成员函数的调用格式:类名.成员函数名(参数)。其中“.”是点运算符,只能用于类对象,其左侧对象必须是一个类类型的对象(类类型即类定义的类型,名称为类名),右侧对象必须是该类的一个成员名,运算结果为右侧指定的成员。“()”为调用运算符,用于调用函数,括号里面放实参列表,也可以为空。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值