C++标准库的初探
1,操作符 << 的原生意义是按位左移,例:
1 << 2;
其底层的意义是将整数 1 按位左移 2 位,即:
0000 0001 ==> 0000 0100;
2,重载左移操作符,将变量或常量左移到一个对象中;
3,重载左移操作符编程实验:
1,main.cpp 文件:
#include <stdio.h> const char endl = '\n'; class Console
{
public:
Console& operator << (int i)
{
printf("%d", i); return *this;
}
Console& operator << (char c)
{
printf("%c", c); return *this;
}
Console& operator << (const char* s)
{
printf("%s", s); return *this;
}
Console& operator << (double d)
{
printf("%f", d); return *this;
}
}; Console cout; // cout 代表一个命令行 Console 对象; int main()
{
cout << << endl;
cout << "D.T.Software" << endl; double a = 0.1;
double b = 0.2; cout << a + b << endl; return ;
}
2,输出结果:
1
D.T.Software
0.300000
3,说明:
1,如果进行了左移的重载之后,那么程序将产生神奇的变化,在 main() 中不用 printf() 和格式化字符串 '\n' 了,因为编译器会通过重载的机制会为我们选择究竟使用哪一个重载机制;
4,C++ 标准库:
1,重复发明轮子并不是一件有创造性的事,站在巨人的肩膀上解决问题会更加 有效;
1,以后在工程开发中,如果有好的想法,想要实现某些模块,在真正的动手之前,一定要查阅是否有前辈实现了这个方法,如果有,可以找来看看,如果满足需求,直接拿来用,如果不是,再拿来改写(你的软件);
2,现在巨人的肩膀就是前人开发的 C++ 标准库;
2,C++ 标准库并不是 C++ 语言的一部分;
1,各大厂商规定,只要发布一款编译器,就要随之发布一款标准库;
3,C++ 标准库是由类库和函数库组成的集合;
4,C++ 标准库中定义的类和对象都位于 std 命名空间中;
5,C++ 标准库的头文件都不带 .h 后缀;
6,C++ 标准库涵盖了 C 库的功能;
1,C 库是 C++ 标准库子库,为了兼容 C 语言;
5,C++ 编译环境的组成:
1,编译模块支持 C++ 标准语法和 C++ 扩展语法,扩展语法对不同的编译器是 不一样的、不通用的;
2,C 语言兼容库,看上去和用起来和 C 语言库是完全一样的,因为编译器厂商都希望自己的 C++ 编译器被最大程度的接受,因此直接提供一样的 C 语言头文件供开发者使用,目的是让编译器能够直接编译成功用户所写的 C 语言代码,仅仅是为了推广 C++ 编译器,这里的 C 语言兼容库和 C++ 标准库中的 C 库子模 块在功能上是重复的,但是包含的头文件不一样而已;
3,编译器扩展库是由编译器生产厂商定制的,因编译器不同而不同;
6,C++ 标准库预定义了多数常用的数据结构:
1,<bitset> <set> <map> <vector>
2,<deque> <list> <queue> <stack>
3,<cstdio> <cstring> <cstdlib> <cmath>
1,相当于 stdio.h string.h stdlib.h math.h;
2,C++ 标准库中的 C 库子模块;
3,这不是 C 语言兼容库;
7,C++ 标准库中的 C 库兼容编程实验:
1,main.cpp 文件:
#include <cstdio>
// #include <stdio.h> //这里包含的不是 C 语言库的头文件,这是 C++ 编译器提供的 C 语言兼容库的头文件,不是标准库的一部分,不用打开 std;
#include <cstring> // C++ 中的标准库文件,同时一定要打开 std 命名空间;
#include <cstdlib>
#include <cmath> using namespace std; int main()
{
printf("Hello world!\n"); char* p = (char*)malloc(); strcpy(p, "D.T.Software"); double a = ;
double b = ;
double c = sqrt(a * a + b * b); printf("c = %f\n", c); free(p); return ;
}
2,输出结果:
Hello world!
c = 5.000000
3,C 语言中是没有前六行的写法,意味着推出的 C++ 编译器附带的自由 C++ 标准库的时候,C 语言的代码只有更改头文件后才能够编译通过,意味着已经存在的这些 C 语言代码不能够被编译通过,因此使用 C++ 的用户肯定很少,因此 C++ 编译器厂商就提出来自己的 C 语言兼容库,在使用方式上和 C 库一样;
4,使用标准库一定要打开标注库:
1,using namespace std;
8,C++ 标准库:
1,前人根据面向对象思想,认为在现实中显示器有一个对象,键盘也是有一个对象,面向对象思想就是要将现实世界无缝的搬到计算机程序领域;
2,C++ 标准库中有一个全局对象 cout,用来表示显示器,有一个全局对象 cin,用来表示键盘;
9,C++ 中的输入输出:
1,main.cpp 文件:
#include <iostream>
#include <cmath> using namespace std; int main()
{
cout << "Hello world!" << endl; // cout 相当于命令行; double a = ;
double b = ; cout << "Input a: ";
cin >> a; // cin 重载右移操作符; cout << "Input b: ";
cin >> b; double c = sqrt(a * a + b * b); cout << "c = " << c << endl; return ;
}
2,输出结果:
Hello world!
Input a: 3
Input b: 4
c = 5
3,本节课后续所有输入输出采用 C++ 标准库,不在采用厂商提供的 C 兼容库;
10,小结:
1,C++ 标准库是由类库和函数库组成的集合;
1,没有 *.h 文件;
2,C++ 标准库包含经典算法和数据结构的实现;
3,C++ 标准库涵盖了 C 库的功能;
4,C++ 标准库位于 std 命名空间中;
C++标准库的初探的更多相关文章
- 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...
- 把《c++ primer》读薄(3-1 标准库string类型初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1:养成一个好习惯,在头文件中只定义确实需要的东西 using namespace std; //建议需要什么再using声 ...
- 16.C++-初探标准库
在别人代码里,经常看到std命名空间,比如使用std命名空间里的标准输入输出流对象cout: #include<iostream> using namespace std; int mai ...
- 第32课 初探C++标准库
有趣的重载: 实验: 将1左移到cout对象中. 将Test改名为Console,此时我们的本意是想让这个cout代表当前的命令行: cout代表命令行的一个实例,本意是想将1打印到命令行上. 我们在 ...
- 32,初探c++标准库
1. 有趣的重载 (1)操作符<<:原义是按位左移,重载“<<”可将变量或常量左移到对象中 重载左移操作符(仿cout类) #include<stdio.h> co ...
- Python标准库--typing
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python 3.5 增加了一个有意思的库--typ ...
- PHP SPL(PHP 标准库)
一.什么是SPL? SPL是用于解决典型问题(standard problems)的一组接口与类的集合.(出自:http://php.net/manual/zh/intro.spl.php) SPL, ...
- C 标准库系列之locale.h
locale.h 区域设置相关,主要针对时间日期.货币格式.字符控制.数字格式等以满足某区域的设置需要. locale设置类别主要包括以下几个宏定义的类别: LC_ALL:设置所有的类别: LC_CO ...
- C 标准库系列之errno.h
errno.h 提供了一个整数全局变量errno,当系统调用或者库函数的错误事件发生时可能会修改该值,指明错误的原因,该值可在任何需要的地方被修改:一般情况不为0的值表示出现了异常或者错误. errn ...
随机推荐
- 导入excle到服务器时候删除服务器历史数据
//删除历史数据EXCLE 当天前一天的数据都删除 var folder = Path.GetDirectoryName(absFilePath); var files = Directory.Get ...
- 通用的规则匹配算法(原创)(java+.net)
1.java里可以使用Spring的 Spel或者Google的Aviator 如果使用 Aviator 则添加以下依赖 <dependency> <groupId>com.g ...
- linux设置python虚拟环境的环境变量
针对 linux系统中 python虚拟环境 设置环境变量 2种方法: 1.在建好的虚拟环境的 venv/bin/active 文件中,写入需要的环境变量,再进入虚拟环境: 如 配置文件路径 JERR ...
- rpmgraph - 显示 RPM 软件包依赖关系图
SYNOPSIS rpmgraph PACKAGE_FILE ... DESCRIPTION rpmgraph 使用 PACKAGE_FILE 参数来产生一个软件包依赖关系图.每个 PACKAGE_F ...
- Kotlin搞起来——2.基础知识
在上一节中简单的给大家介绍了下Kotlin的特点,以及结合自己实际项目 中的使用来帮助大家了解这门语言,其实真的没你想象中的那么难,本文打算 介绍的是Kotlin中基础相关的一些语法(用法),有个大概 ...
- Linux 进程通信之:内存共享(Shared Memory)(转,好文章)
https://blog.csdn.net/afei__/article/details/84188548
- 前端每日实战:63# 视频演示如何用纯 CSS 创作一台烤面包机
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OEBJRN 可交互视频 此视频是可 ...
- golang-练习2
反转字符串 package main import "fmt" func FirstReverse(str string) string { var str1 []rune run ...
- Java JDK1.8新特性之四大函数式接口
JDK 1.8的一些新特性 四大核心函数式接口(Consumer.Predicate.Supplier.Function),结合lambda表达式 import java.util.ArrayList ...
- 51nod 1490: 多重游戏(树上博弈)
题目链接 该题实质上是一个树上博弈的问题.要定义四种状态——2先手必胜 1先手必败 3可输可赢 0不能控制 叶子结点为先手必败态: 若某结点的所有儿子都是先手必败态,则该结点为先手必胜态: 若某结点的 ...