【C++深度剖析教程9】初探C++标准库

在这之前,我写的C++程序不能叫做标准的C++程序,因为里面写的大多数还带有C语言的影子。今天我们来学习C++标准库。

首先看一下例子:操作符<<的原生意义是按位左移。那么我们重载这个操作符,将变量或者常量,左移到一个对象中!
看一个程序:

#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;
int main()
{cout << 1 << endl;cout << "D.T.Software" << endl;double a = 0.1;double b = 0.2;cout << a + b << endl;}

运行结果:

1
D.T.Software
0.300000

以上程序呢,重载了操作符<<,让它把变量左移到一个对象cout中,学过C语言的话,就知道这个功能怎么跟printf的功能这么想呢,都是可以打印出结果的。没错,这个重载就是与printf功能一样,以后我们在C++的编程中都不再使用printf,都使用上面的方法。那么我们不可能每次都去定义那些类函数,而是直接调用库函数。前辈们已经把我们所需要的做的都做好了并且放到了C++标准库中。

那么什么是C++标准库呢?

  • C++标准库并不是C++语言的一部分
  • C++标准库是由类库和库函数组成的集合
  • C++标准库定义的类和对象都位于std 命名空间中
  • C++标准库的头文件都不带.h后缀
  • C++标准库涵盖了C库的功能

C++编译环境的组成:
C++编译环境的组成

C++标准库预定义了常用的数据结构:
在这里插入图片描述
下面我们看一下,C++的库,是否兼容C语言,看以下代码:

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>using namespace std;int main()
{printf("Hello Word!\n");char* p = (char*)malloc(16);strcpy(p, "D.T.Software");double a = 3;double b = 4;double c = sqrt(a*a + b*b);printf("c = %f\n",c);free(p);return 0;
}

运行结果为:

Hello Word!
c = 5.000000

从以上程序我们可以看出,虽然头文件都是包含的C++的标准库,但是程序中写的都是C语言。这说明,C++标准库完美的兼容了C语言的库。

在C语言中, scanf代表键盘的输入,那么在C++中,用什么表示键盘的对象呢?
这里写图片描述

来看一个例子感受一下C++库函数:

#include <iostream>
#include <cmath>using namespace std;int main()
{cout << "Hello world!" << endl;double a = 0;double b = 0;cout << "Input a: ";cin >> a;cout << "Input b: ";cin >> b;double c = sqrt(a*a + b*b);cout << "c = " << c << endl;return 0;
}

运行结果为:

Hello world!
Input a: 3
Input b: 4
c = 5

从键盘输入3和4,最终计算出运算结果!可以看出cin这个对象,类似于C语言中的scanf。

总结:

  • C++标准库是由类库和库函数组成的集合
  • C++标准库包含经典算法和数据结构的实现
  • C++标准库涵盖了C库的功能
  • C++标准库位于std命名空间中

想一起探讨以及获得各种学习资源加我(有我博客中写的代码的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流关于嵌入式,操作系统,C++语言,C语言,数据结构等技术问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

员工考核UI网页界面(PS大屏文件资料)

现分享人员管理可视化数据统计网页UI、员工考核数据可视化UI网页界面模版的UI源文件&#xff0c;供UI设计师们快速获取PSD源文件完成工作。 若需更多 大屏组件&#xff0c;请移步小7的另一篇文章&#xff1a;数据可视化大屏组件&#xff0c;大屏PSD设计源文件(大屏UI设计规范)…

docker 使用中遇到的问题

1.执行docker run hello 命令建立镜像过程中报错 开始以为是加速器的问题&#xff0c;将/etc/docker/daemon.json 文件删除还是不行 后来执行了这两条命令&#xff1a;就不报错了如下图&#xff1a; systemctl daemon-reloadsystemctl restart docker.service 参考&#xff1…

maven 解决冲突

1.Maven之jar包冲突解决&#xff08;理解maven 产生冲突的原因&#xff09; 导致jar包冲突的原因 1、mvn的传递依赖特性&#xff1a;mvn编译打包除了会引入直接申明的依赖&#xff0c;还会引入间接申明的依赖 2、mvn的依赖仲裁规则&#xff1a; 1&#xff09;. 按照项目总控P…

jz2440开发板修改UBOOT支持NAND FLASH

很多天没有看嵌入式的东西了&#xff0c;今天来看一下&#xff0c;继续之前移植uboot到jz2440开发板。今天我们来实现Uboot支持NAND FLASH。 在之前的文章里&#xff08;点击连接查看之前的记录&#xff09;&#xff0c;我们为了编译通过把NAND FLASH 给屏蔽掉了&#xff0c;现…

i.MX6网卡驱动程序fec.c的分析(AR8035网卡驱动程序的详细分析)之二

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 今天接着分析上次没有分析完的i.MX6网卡驱动程序。上一篇分析了iMX6网卡驱动程序的driver与device的加载过程&#xff08;点击可以查看上一篇文章&…

阅读ethercat官方文档关于ethercat网卡驱动程序的一些内容

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 改造iMX6&#xff08;fec&#xff09;网卡驱动程序前期工作之&#xff1a;阅读ethercat-1.5.2.pdf文档的第四章内容。 ethercat-1.5.2.pdf文档链接&a…

jz2440开发板移植U-boot之修改代码支持DM9000网卡

今天我们来移植U-boot到jz2440开发板&#xff0c;修改代码支持DM9000网卡。查看之前写的移植记录请点击链接&#xff1a;点击查看之前的移植记录 现在大多数开发板都支持DM9000网卡。我们的U-boot源码里面也是有DM9000网卡的驱动程序的。文件为Dm9000x.c&#xff08;drivers\n…

移植U-BOOT之裁剪和修改默认参数(易用性)启动内核,以及对uboot进行分区

今天我们来裁剪U-BOOT&#xff0c;使其更加易用&#xff0c;修改默认参数&#xff0c;以及制作最终修改好得补丁文件方便以后的快速移植。 那么如果想看之前的关于网卡以及flash等的移植&#xff0c;请点击链接查看&#xff1a;点击链接查看 在裁剪修改之前呢&#xff0c;我们…

移植U-BOOT之支持烧写YAFFS文件系统以及制作U-BOOT补丁

今天&#xff0c;我们来移植U-BOOT让其支持YAFFS文件系统映像的烧写&#xff0c;以及最后的终极目标&#xff0c;制作Uboot补丁&#xff0c;因为我们信心苦苦移植好了Uboot&#xff0c;如果换一个地方的或者换一台电脑之类的&#xff0c;我们也不想再浪费时间从头开始移植&…

【数据结构学习之完全从零实现所有数据结构的代码编写之一】泛型编程简介

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 今天开始系统性学习数据结构内容&#xff0c;之前也看过大话数据结构这本书&#xff0c;对大多数概念以及数据结构都有一定的了解&#xff0c;但是就是…

zookeeper 安装和使用

1.Windows安装和使用zookeeper 之前整理过一篇文章《zookeeper 分布式锁服务》&#xff0c;本文介绍的 Zookeeper 是以 3.4.5 这个稳定版本为基础&#xff0c;最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取&#xff0c;Zookeeper 的安装非常简单&#xf…

【移植Linux 3.4.2内核第一步】之简单修改

前一阵子已经将U-boot移植好了&#xff0c;从今天开始&#xff0c;我们开始移植linux内核。移植的内核为3.4.2&#xff0c;移植的开发板为&#xff1a;jz2440开发板。 想看之前移植U-boot的记录&#xff0c;可以查看我的博客专栏&#xff0c;点击链接&#xff1a;点击查看U-bo…

前端学习(77):css中常见margin塌陷问题之解决办法

塌陷问题 当两个盒子在垂直方向上设置margin值时&#xff0c;会出现一个有趣的塌陷现象。 ①垂直并列 首先设置两个DIV,并为其制定宽高 1 1 /*HTML部分*/2 <body>3 <div class"box1">box1</div>4 <div class"box2">box2…

HBase2.0 vs HBase1.x 延时比较

hbase2.0已经正式发布&#xff0c;对比之前1.x版本&#xff0c;2.0在读写链路上做了完善的优化&#xff0c;offheap、netty rpc等&#xff0c;这里做个小测试实验对比1.x和2.0在读写上的延时情况。本测试基于特定测试环境与软件版本得到的结果&#xff0c;仅供参考。 测试介绍 …

【数据结构学习之完全从零实现所有数据结构的代码编写之二】智能指针

今天我们依然暂时不讲解数据结构里面的内容&#xff0c;我们来复习一下昨天学的模板技术用于数据结构编程的思想&#xff0c;给出一个模板技术的实例&#xff1a;智能指针的应用。喜欢看我分享的加我q:1126137994 加我共同学习交流各种技术。 为什么会引入智能指针呢&#xff…

职责链模式(Chain of Responsibility)

重要概念 1. 使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 2.请求是沿着链条传递到有一个处理点对象负责处理这个请求为止。请求者无需…

mootools

$();// 选择ID为”body_wrap“的元素$(body_wrap);.getElement();// 选择ID为”body_wrap“的元素下面的第一个链接$(body_wrap).getElement(a); or #xxx or .xxx.getElements();// 选择ID为”body_wrap“的元素下面的所有链接$(body_wrap).getElements(a); $(body_wrap).getE…

图形化界面客户端连接phoenix操作hbase

下载客户端软件 DBeaver https://dbeaver.io/download/ 选择对应系统的版本&#xff0c;我这里选择解压版windows64位 创建连接 注意&#xff1a;URL模板就不要一般是默认 选择合适的版本&#xff08;跟你服务器的版本一致&#xff09;&#xff0c;下载jar包 点击测试或完成即…

【C++深度剖析教程12】数组操作符的重载

之前写的C学习记录忘记打编号了&#xff0c;从今天开始&#xff0c;所有内容&#xff0c;记录编号&#xff0c;方便以后的查阅复习。今天学习的是C中&#xff0c;数组操作符的重载。 上一篇博文写的是介绍C中的字符串类&#xff0c;我们知道&#xff0c;C标准库中通过string类…

前端学习(80):按类型划分标签(inline)

解决font-size中间有间隙 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compat…