C++学习准备知识_Hammond‘s blog

C++学习准备知识

C++学习准备知识

(本博客C++部分均为《C++ primer(第五版)》学习笔记)
本章类容导图
在这里插入图片描述

编写一个简单C++程序

每个C++程序都包含一个或多个函数(function),其中必须包含一个main函数,操作系统通过调用main函数来运行C++程序,以下是一个非常简单的main函数,它什么也不干。

int main(){
   return0
}

一个函数的定义包含四部分

函数
返回类型 return type
函数名 function name
形参列表 parameter list
函数体 function body

函数:具名的计算单元

对应上例的main函数,函数名为mian,形参列表为空,int为返回类型(int类型是一种内置类型build-in type,即语言自身定义的类型)(返回0表示成功,非0含义由系统定义,通常用来指出错误类型),花括号包括的部分为函数体,包括的是一段语句块block of
statements。

编译,运行程序

很多PC机上都具备继承开发环境(Intergrated Developed Environment,IDE),这里不介绍具体IDE工具。
无论使用命令行还是IDE,大多数编译器都要求程序源码存储在一个或多个文件中,成为源文件(soruce file)。文件后缀告诉系统这个文件是一个C++程序,常见有.cc,.cxx,.cpp,.cp和.C。
假定我们的main存于prog1.cc文件中,命令行编译如下:

$ CC prog1.cc

编译器生成一个可执行文件,windows下为prog1.exe,UNIX下为a.out。
运行程序:
windows:

$ prog1 或者 $ .\prog1

UNIX:

$ a.out 或者 $ ./a.out

初识输入输出

C++语言并未定义任何输入输出语句,而包含了一个标准库用来提供IO。iostream库包含两个基本类型istream和ostream。

标准输入输出对象
cin 标准输入
cout 标准输出
cerr 标准错误
clog 一般性信息

cerr是一个ostream对象,关联到标准的错误,通常写入到与标准输出相同的设备,默认情况下cerr的数据时不缓冲的。cerr通常用于输出错误信息或其他不属于程序正常运行的输出内容。

例子:

#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;
    return 0;
}

使用#include加<>放在所有函数外,源文件开始的位置,指出头文件,引入标准库。
函数体的第一句话执行了一个表达式。
在C++中,一个表达式产生一个计算结果,他由一个或多个对象和(通常是)一个运算符组成
例子中第一句表达式,使用了输出运算符<<,该运算符接受两个对象,一个ostream对象,一个要打印的值。此运算符将给定值写到ostream对象中,运算结果为写入了给定值的ostream对象。
第一句表达式等价于:

  (std::cout<<"Enter two number:")<<std::endl;

也等价于

  std::cout<<"Enter two number:";
  std::cout<<std::endl;

第一个运算打印一个字符串常量。
第二个运算打印endl,被称为操纵符的特殊值。效果为结束当前行,并将设备关联的缓冲区中的内容刷到设备中。

缓冲区buffer: 一个存储区域,用于保存数据。IO设施通常将输入输出数据保存在一个缓冲区中。

std::cout中的前缀std::指出cout的命名空间,帮助避免不经意的名字定义的冲突。标准库的所有名字都在命名空间std中。

命名空间:namespace,将库定义的名字放在一个单一位置的机制。命名空间可以帮助避免不经意的名字冲突,C++标准库定义的名字在命名空间std中。

输入运算符>>与输出运运算符类似。

注释简介

graph LR
 C{注释}
    C --> D[单行注释 //]
    C --> E[注释界定符 /*  */]

注释界定符不能嵌套。

控制流

while语句

while语句反复执行一段代码,直到给定条件为假为止。
1到10之和

#include <iostream>
int main() {
    int sum = 0, val = 1;
    //只要val的值小于等于10,while循环就会持续执行
    while(val <= 10){
        sum += val;
        ++val;
    }
    std::cout<<"sum of 1 to 10 inclusive is "<<sum<<std::endl;
    return 0;
}

语句块(block)指花括号包围的0条或多条语句的序列。

for语句

重写1加到10点程序

#include <iostream>

int main() {
    int sum = 0;
    for (int val = 1; val <= 10; ++val) {
        sum += val;//等价于 sum = sum + val
    }
    std::cout<<"sum of 1 to 10 inclusive is "<<sum<<std::endl;
    return 0;
}
for语句
循环体
循环头
初始化语句
循环条件
表达式

for循环总体执行流程

创建变量val
val是否小于等于10
执行for循环体
退出循环
val的值加1
读取数量不定的输入数据
#include <iostream>

int main(int argc, const char * argv[]) {
    int sum = 0, value = 0;
    //读取数据直到遇到文件尾,计算所有读入的值的和
    while (std::cin >> value) {
        sum += value;
    }
    std::cout << "sum is : " << sum << std::endl;
    return 0;
}

循环条件std::cin>>value表示从标准输入读取一个输入值,并保存在std::cin中,返回std::cin对象,所以此循环条件实际上检查的是std::cin。
当使用一个istream对象作为条件时,其实是检测流的状态。如果流是有效的,那么检测成功。当遇到文件结束符,或一个无效的输入时(如读入的值不是一个整数),istream对象的状态会变为无效,处于无效状态的istream对象会使条件变为假。

文件结束符:
windows系统:ctrl+z再enter或return;
UNIX系统(包括Mac系统):Ctrl+D

if语句

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

#include <iostream>

int main(int argc, const char * argv[]) {
    int currVal = 0, val = 0;
    //读取第一个数,并确保确实有数据可以处理
    if(std::cin >> currVal){
        int cnt = 1; //保存正在处理的当前值的个数
        while (std::cin >> val) {
            if (val == currVal) {
                ++cnt;
            }else{
                std::cout << currVal << " occurs " << cnt << "times" << std::endl;
                currVal = val;
                cnt = 1;
            }
        }
        //记住打印文件中最后一个值的个数
         std::cout << currVal << " occurs " << cnt << "times" << std::endl;
    }
    return 0;
}

类简介

在C++中我们通过定义一个类class来定义自己的数据结构。
一个类定义了一个类型,以及与其关联的一组操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值