我们学习c的时候也频繁用到了一些库,但是库并不多,c++也有库,且比c要多,通常越高级的语言库越多,如java、python等封装越严重的语言库就更多,在学习高级语言时学习库占比变得很重,如python我们学习完他的语法才算刚刚入门,后面的提高就是库的应用。一个典型的c程序(后缀.c)可以完全被视为c++程序来编译。在c++的编译器中自动定义了一个long int型__cplusplus(双下划线)变量用来存放当前c++的版本,而c没有该变量,所以c程序可以使用宏来判断是否有定义__cplusplus符号来判断当前是c还是c++的编译环境。
c++的源文件名的常用扩展名有.cpp .cxx .cc .c .c++,头文件有.hpp .hxx .h。由此可见c++是一个c的超集, c++完全兼收了c的语法特性和标准库,所以c++编译器完全可以正常编译一个c程序。
虽然c++程序可以支持c形式包含头文件的方式并直接使用库中的函数,如stdio.h,他并不是源生支持,而是这是c++做了很多额外工作,来兼容的。所以c++并不建议我们以c的写法去包含原来c的头文件,而是推荐使用c++的库,如<cstdio>来代替<stdio.h>,没错没有扩展名,在c++中所有的标准库都没有后缀扩展名,如.h。
ubuntu中gcc的工具链的头文件在/usr/include 在当前目录下还有一个c++的文件夹,存放的全是g++工具链的头文件。
iostream引用
iostream是c++的常用标准库之一,内部包含了很多我们常用的函数,为了防止库与我们自定义的名称冲突,所以他也使用了命名空间,封装的命名空间名称为std。std的声明在iostream头文件中,与众不同的是这个头文件的包含不需要.h,直接#include<iostream>头文件即可,既然是命名空间,那么我们要使用std命名空间的元素,如cout就需要std::cout。由于对该头文件内的东西频繁使用,所以我们一般,直接将整个命名空间进行声明如:
using namespace std; //声明库中的命名空间,
cout << “hell word” << endl //调用其内部元素cout
标准输出cout
cout标准输出,对应stdout,在std命名空间中。结合 <<(流操作)进行输出,可多节连接。cout涉及的头文件有<iostream> <iomanip>,iostram还生了两个儿子就是ostram(输出)和istram(标准输入),iomanip内部是一些格式化,如输入输出的对齐。
cout本质上是ostream(iostream派生类)的一个对象,暂时我们先将类简单理解成类型,对象理解成变量。也就是说cout其实是在iostream中事先定义的一个变量。
操作符 << 本质上是c语言中的左移,在iostream中进行了运算符重载(把符号功能进行了重新定义)。
示例:
int val=8;
cout << “hello word” << val << endl
我们可以把cout看成是一个输出设备,把<<看成箭头,大概意思就是把字符串按箭头方向送到cout设备即可实现输出。endl与cout一样都是std命名空间中的一个对象,我们可简单的把他理解成是\n\r的一个替代。实际上我们同样可以就就写<</n,但是这是c的语法,我们在c++中一般不用。val是一个我们要输出值的变量。多个<<符号可以进行级联。
流操作格式化
流操作格式化一般使用“流操作算子”,常用的操作符见下表,他们都是在iomanip头文件中,要使用必须包含该头文件。
流操纵算子 |
作 用 |
dec( |