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++标准库的初探的更多相关文章

  1. 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...

  2. 把《c++ primer》读薄(3-1 标准库string类型初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1:养成一个好习惯,在头文件中只定义确实需要的东西 using namespace std; //建议需要什么再using声 ...

  3. 16.C++-初探标准库

    在别人代码里,经常看到std命名空间,比如使用std命名空间里的标准输入输出流对象cout: #include<iostream> using namespace std; int mai ...

  4. 第32课 初探C++标准库

    有趣的重载: 实验: 将1左移到cout对象中. 将Test改名为Console,此时我们的本意是想让这个cout代表当前的命令行: cout代表命令行的一个实例,本意是想将1打印到命令行上. 我们在 ...

  5. 32,初探c++标准库

    1. 有趣的重载 (1)操作符<<:原义是按位左移,重载“<<”可将变量或常量左移到对象中 重载左移操作符(仿cout类) #include<stdio.h> co ...

  6. Python标准库--typing

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python 3.5 增加了一个有意思的库--typ ...

  7. PHP SPL(PHP 标准库)

    一.什么是SPL? SPL是用于解决典型问题(standard problems)的一组接口与类的集合.(出自:http://php.net/manual/zh/intro.spl.php) SPL, ...

  8. C 标准库系列之locale.h

    locale.h 区域设置相关,主要针对时间日期.货币格式.字符控制.数字格式等以满足某区域的设置需要. locale设置类别主要包括以下几个宏定义的类别: LC_ALL:设置所有的类别: LC_CO ...

  9. C 标准库系列之errno.h

    errno.h 提供了一个整数全局变量errno,当系统调用或者库函数的错误事件发生时可能会修改该值,指明错误的原因,该值可在任何需要的地方被修改:一般情况不为0的值表示出现了异常或者错误. errn ...

随机推荐

  1. 使用网易云web 版外部链接

    右击打开控制台,找到音乐列表 ——> 点开详情 -------> 生成外部链接器 ,如: outchain/0/3073492173    ,这是每一个音乐的编号. 然后拼接上它的官网域名 ...

  2. 【转】sed命令的基本操作

    原文链接 sed命令行格式为:          sed [-option]  ‘command’  输入文本/文件         常用选项:        -n∶取消默认的输出,使用安静(sile ...

  3. metasploit下Windows的多种提权方法

    metasploit下Windows的多种提权方法 前言 当你在爱害者的机器上执行一些操作时,发现有一些操作被拒绝执行,为了获得受害机器的完全权限,你需要绕过限制,获取本来没有的一些权限,这些权限可以 ...

  4. Ajax —— 服务器端发送JSON数据

    重点需要解决的问题:服务器端如何构建JSON数据 思考:JavaBean转JSON数据,集合转JSON数据,普通java对象(String,Number)转JSON数据 一.Gson开源jar包   ...

  5. 基于Opencv自有模型识别人脸与人眼

    #!/usr/bin/python # -*- coding: utf-8 -*- import cv2 face_cascade = cv2.CascadeClassifier("D:/O ...

  6. 从零开始的PHP生活Day1

    PHP 什么是PHP? PHP(Hypertext Preprocessor,超文本预处理器)是一种服务器端的.跨平台的.HTML嵌入式的弱类型开源脚本语言. 1.服务器端:PHP需要使用服务器软件进 ...

  7. 最强大的Android线程池框架

    背景 大家都知道在我们的开发中永远都离不开多线程,对于我们为什么要使用多线程,多线程的使用和多线程的一些基础知识这里我们就不讲了,有兴趣的朋友可以去看一下博主之前的几篇文章: 线程你真的了解它吗 这才 ...

  8. Sass-@each

    @each 循环就是去遍历一个列表,然后从列表中取出对应的值. @each 循环指令的形式: @each $var in <list> 如果你没有接触过列表,也不要紧,他也非常简单. 在下 ...

  9. 洛谷4843 BZOJ2502 清理雪道

    有源汇有上下界的最小可行流. YY一下建图应该很好搞吧(? 就是对于每个雪道都是[1,inf]然后源点到所有点都是[0,inf]所有点到汇点都是[0,inf] 这样的话跑一个有源汇上下界最小可行流就可 ...

  10. Halo(十)

    Spring Converter(转换器) @FunctionalInterface public interface Converter<S, T> { //一对一转换 @Nullabl ...