初识C++入门(1)
为什么会衍生出C++?
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代,计算机界提出了00P(object oriented programming: 面向对象)思想,支持面向对象的程序设计语言应运而生。
1982年,Biarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了-种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此: C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计(这也是C++兼容C语言的原因),又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。
C++祖师爷的介绍
本贾尼·斯特劳斯特卢普(Bjarne Stroustrup,1950年6月11日-),丹麦人,计算机科学家,在德克萨斯A&M大学担任计算机科学的主席教授。他最著名的贡献就是开发了C++程序设计语言。
1982年,美国AT&T公司贝尔实验室的本贾尼博士在C语言的基础上引入并扩充了面向对象的概念,发明了—种新的程序语言。为了表达该语言与C语言的渊源关系,它被命名为C++。而本贾尼博士被尊称为C++语言之父。
#include<iostream>
using namespace std;int main()
{cout << "hello world" << endl;return 0;
}
我们先不用看懂全部代码 比如using namespace std;cout <<endl是什么意思?
咱们不急,先听我娓娓道来,我会在下面解释到的,解开困惑的
第一个知识 命名空间 namespace
当我们用C语言运行这段代码会出现报错
#include<stdio.h>
#include<stdlib.h>
int rand = 10;int main()
{printf("%d ", rand);return 0;
}
为什么呢?因为在头文件<stdlib.h>库里面就包含了rand函数,我们再次使用rand定义了全局变量,因此会出现命名冲突,但C语言无法解决这种命名冲突问题,所以C++祖师爷为了解决命名冲突问题提出了namespace来解决。
命名空间一般用namespace+自己定义名字
比如我使用的是namespace as (as就是命名空间的名字)
用%p访问rand是因为rand是头文件里面的rand函数 编译器会推荐用%p访问
#include<stdio.h>
#include<stdlib.h>namespace as
{int rand = 10;
}
int main()
{printf("%p", rand);return 0;
}
那怎么访问命名空间里面的rand的值呢?
使用 : :域作用限定符来访问
#include<stdio.h>
#include<stdlib.h>namespace as
{int rand = 10;
}
int main()
{printf("%p", rand);printf("%d", as::rand);return 0;
}
命名空间相当于用围墙把rand"保护了起来"且留了一个入口,入口上面有牌匾"里面有恶犬 生人勿近 会咬人",只能有熟人进去喂"它(rand)"食物和与它互动。
#include<stdio.h>
#include<stdlib.h>namespace as
{int rand = 10;struct Node{struct Node* next;int val;};int Add(int left, int right){return left + right;}
}
int main()
{printf("%p\n", rand);printf("%d\n", as::rand);printf("%d\n", as::Add(2, 3));struct as::Node node;return 0;
}
假设同一个命名空间有相同的变量会怎么样呢?会不会自己和自己打一架?
实际上命名空间是可以嵌套的
#include<stdio.h>
#include<stdlib.h>namespace as
{int rand = 10;namespace as1{int rand = 30;}namespace as2{int rand = 20;}struct Node{struct Node* next;int val;};int Add(int left, int right){return left + right;}
}
int main()
{printf("%p\n", rand);printf("%d\n", as::rand);printf("%d\n", as::as1::rand);printf("%d\n", as::as2::rand);printf("%d\n", as::Add(2, 3));struct as::Node node;return 0;
}
比如你在公司需要写项目比如栈,为了防止与同事写的冲突就可以运用命名空间
Stack.h
#pragma once
#include<stdio.h>
#include<stdlib.h>namespace fk
{typedef struct Stack{int* a;int sz;int capacity;}ST;void STInit(ST* ps);void STPush(ST* ps,int x);
}test.cpp
#include"Stack.h"namespace fk
{void STInit(ST* ps){ps->a = NULL;ps->capacity = ps->sz = 0;}void STPush(ST* ps, int x){//....}
}int main()
{fk::ST st;fk::STInit(&st);fk::STPush(&st, 1);fk::STPush(&st, 2);fk::STPush(&st, 3);
}
那么它们运行起来不会冲突吗?
test.cpp
#include"Stack.h"namespace fk
{void STInit(ST* ps){ps->a = NULL;ps->capacity = ps->sz = 0;}void STPush(ST* ps, int x){//....}
}using namespace fk;
int main()
{ST st;STInit(&st);STPush(&st, 1);STPush(&st, 2);STPush(&st, 3);
}
只需要在test.cpp写上一句 using namespace fk;即可
那么using namespace std;是什么意思呢?
std是C++官网标准库的命名空间,当我们展开std时,库里面的函数就可以使用了
那么std库里面的函数能随意展开吗?答案是否定的
在我们平常练习C++时可以展开自己定义的命名空间和std库的命名空间,但在实际工程上是不能随意展开的,容易出现冲突。
#include<iostream>是C++的头文件 类似于C语言的#include<stdio.h>
i=In O=Out 输入与输出 <<是流插入
C++为了有自己的换行符有了endl endl=end line.
#include<iostream>int main()
{//<< 是流插入int a = 10;std::cout << a << "\n";int b = 20;double e = 13.14;// << 可以自动识别数据类型int c = 545;std::cout << b<< "\n";std::cout << e << "\n";std::cout << c << std::endl;return 0;
}
在我们不展开C++的库函数时,只能用域作用限定符来cout和endl,例如std::cout std::endl
但每次指定命名空间不方便,又害怕C++库里面函数全部暴露 又有风险冲突?
那么怎么办呢?我们可以指定展开命名空间 例如下图
#include<iostream>
using std::cout;
using std::endl;
int main()
{//<< 是流插入int a = 10;cout << a << "\n";int b = 20;double e = 13.14;// << 可以自动识别数据类型int c = 545;cout << b<< "\n";cout << e << "\n";cout << c << endl;return 0;
}
cout中的C=console(控制台) cin是流提取 相当于C语言的scanf
#include<iostream>
using std::cout;
using std::endl;
int main()
{int a = 20;int b = 30;cout << a << endl << b << endl;std::cin >> a >> b;return 0;
}
如果要控制数字精度怎么办呢?使用C,因为C++兼容C
#include<iostream>
using std::cout;
using std::endl;
int main()
{int a = 20;int b = 30;double c = 13.1424;cout << a << endl << b << endl;//控制精度用C 因为C++兼容Cprintf("%.1lf\n", c);return 0;
}
相关文章:
初识C++入门(1)
为什么会衍生出C? C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代,计算机界提出…...
使用Selenium的WebDriver进行长截图
from selenium import webdriver from PIL import Image from io import BytesIO # 创建浏览器驱动 driver webdriver.Chrome()# 打开网页 driver.get("https://www.douban.com/") # 替换为您要截图的网页URL def get_long_shot(driver,table_element):# 获取页面的…...
python+大数据校园卡数据分析 计算机竞赛
0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于yolov5的深度学习车牌识别系统实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:4分工作量:4分创新点:3分 该项目较为新颖&am…...
【机器学习】sklearn降维算法PCA
文章目录 降维PCAsklearn中的PCA代码实践 PCA对手写数字数据集的降维 降维 如何实现降维?【即减少特征的数量,又保留大部分有效信息】 将那些带有重复信息的特征合并,并删除那些带无效信息的特征等等,逐渐创造出能够代表原特征矩…...
华为云云耀云服务器L实例评测|企业项目最佳实践之评测用例(五)
华为云云耀云服务器L实例评测|企业项目最佳实践系列: 华为云云耀云服务器L实例评测|企业项目最佳实践之云服务器介绍(一) 华为云云耀云服务器L实例评测|企业项目最佳实践之华为云介绍(二) 华为云云耀云服务器L实例评测࿵…...
Xcode升级到15.0 解决DT_TOOLCHAIN_DIR问题
根据个人开发遇到的问题做的总结,公司要求Xcode 14.2 ,Swift 5.7开发,由于升级了Mac 14.0系统后,Xcode 14.2不能使用,解决方案目前有2个 一、在原来Xcode 14.2 的显示包内容,如图 二、升级到Xcode的15.0后…...
小谈设计模式(29)—访问者模式
小谈设计模式(29)—访问者模式 专栏介绍专栏地址专栏介绍 访问者模式角色分析访问者被访问者 优缺点分析优点将数据结构与算法分离增加新的操作很容易增加新的数据结构很困难4 缺点增加新的数据结构比较困难增加新的操作会导致访问者类的数量增加34 总结…...
【25】c++设计模式——>责任链模式
责任链模式定义 C中的责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它通过将请求沿着处理对象的链传递来避免把请求发送者与接收者耦合在一起。 责任链模式的主要思想是,通过将多个处理对象组成一条链&…...
GlobalTransactional
seata-spring的maven坐标: <dependency><groupId>io.seata</groupId><artifactId>seata-spring</artifactId><version>1.6.1</version> </dependency>GlobalTransactional注解的位置: io.seata.sprin…...
Android Studio运行kotlin项目,一直Read timed out
Android Studio运行kotlin项目,一直Read timed out 下载别人的Kotlin项目,导入as后,运行app一直失败,提示Read timed out,有2种解决办法 第一种方式:gradle.properties 修改kotlin项目种的gradle.proper…...
Excel 的单元格内容和单元格格式
文章目录 单元格内容单元格格式常规格式数字格式 单元格内容 文本:只要不是纯数字,Excel 都默认是文本格式。 在 Excel 中,逻辑值只有两个:True 和 False。 全选一片区域,按 Delet 键删除内容时,确实可以删…...
4大软件测试策略的特点和区别(单元测试、集成测试、确认测试和系统测试)
四大软件测试策略分别是单元测试、集成测试、确认测试和系统测试。 一、单元测试 单元测试也称为模块测试,它针对软件中的最小单元(如函数、方法、类、模块等)进行测试,以验证其是否符合预期的行为和结果。单元测试通常由开发人…...
armbian 安装mysql
1、执行安装指令 sudo apt-get update sudo apt-get install mysql-server 2、安装成功后,设置密码 ALTER USER root% IDENTIFIED WITH mysql_native_password BY ysw1234; flush privileges;3、设置允许远程连接并生效 use mysql; update user set host % whe…...
Ubuntu22常用软件
别存太多重要东西在Ubuntu ,硬盘损坏就麻烦 Tweaks自定义UI sudo apt intall gnome-tweaks为了方便管理和添加,还需添加: sudo apt install gnome-shell-extension-prefs gnome-shell-extension-manager -y1.打开Extension应用,添…...
【CFD小工坊】浅水模型的边界条件
【CFD小工坊】浅水模型的边界条件 前言处理边界条件的原则边界处水力要素的计算水位边界条件单宽流量边界条件流量边界条件固壁边界条件 参考文献 前言 在浅水方程的离散及求解方法一篇中,我们学习了三角形网格各边通量值及源项的求解。但仍有一个问题没有解决&…...
电力物联网关智能通讯管理机-安科瑞黄安南
众所周知,网关应用于各种行业的终端设备的数据采集与数据分析,然后去实现设备的监测、控制、计算,为系统与设备之间建立通讯联系,达到双向的数据通讯。 网关可以实时监测并及时发现异常数据,同时自身根据用户规则进行…...
用Flask构建一个AI翻译服务
缘起 首先,看一段代码,只有几行Python语句却完成了AI翻译的功能。 #!/usr/bin/python3import sys from transformers import MarianMTModel, MarianTokenizerdef translate(word_list):model_name "Helsinki-NLP/opus-mt-en-zh"tokenizer …...
微信小程序引入阿里巴巴iconfont图标并使用
介绍 在小程序里,使用阿里巴巴的图标,如下所示: 使用方式 搜索自己需要的图标,然后将需要用到的图标加入购物车,如下图所示: 去右上角,点击购物车按钮;这里第一次使用,会有三个提…...
mysql面试题49:MySQL中不同text数据类型的最大长度
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL中TEXT数据类型的最大长度 在MySQL中,TEXT数据类型用于存储较大…...
从虚拟电厂在上海的实践探索看企业微电网数字化的意义
安科瑞 华楠 作为典型的人口聚集、负荷密集区域,上海市具有外来电比例高、本地资源禀赋不足的特点。从发电侧角度来看,近年来上海风、光等新能源发电装机比例逐年提升,传统的火电逐渐成为调节性发电资源;从负荷侧角度来看上海以第…...
创建并初始化线程池
创建并初始化线程池–》threadpool.h, 创建并初始化&脱离(执行完后)子线程,每个子线程信号量wait阻塞【1】 创建套接字:int listenfd socket( PF_INET, SOCK_STREAM, 0 ); 端口复用:setsockopt( listenfd, SOL_SOCKET, SO_REUSEADDR, &a…...
【LeetCode热题100】--136.只出现一次的数字
136.只出现一次的数字 使用哈希表: class Solution {public int singleNumber(int[] nums) {Map<Integer,Integer> map new HashMap<>();for(int num:nums){Integer count map.get(num);if(count null){count 1;}else{count;}map.put(num,count);}…...
Java idea查看自定义注解的调用地方
Java idea查看自定义注解的调用地方...
ReLU激活函数
LeakyReLU激活函数的具体用法请查看此篇博客:LeakyReLU激活函数 ReLU(Rectified Linear Unit)激活函数是深度学习中最常用的激活函数之一,它的数学表达式如下: 在这里,(x) 是输入,(f(x)) 是输…...
【Android】adjustViewBounds 的理解和使用
理解 adjustViewBounds 是一个 ImageView 的属性,用于调整 ImageView 的边界以适应图像的尺寸。当设置为 true 时,ImageView 的边界将根据图像的宽高比例进行调整,以确保图像完全显示在 ImageView 内部。 理解和使用 adjustViewBounds 的步…...
Redis知识补充
大key删除 unLink scan分批删除 渐进式rehash Redis笔记:Redis的字典什么时候进行Rehash?_redis什么时候进行rehash-CSDN博客...
IIS 部署.NetCore,最细步骤
服务器安装环境 将.net core程序部署到IIS总体需要经过以下3个大步骤,其中在IIS上配置网站有些比较繁琐,我都会逐一给出详细步骤。 <1>安装IIS和.NetCORE运行时程序 <2>以文件的形式发布.NETCORE程序到指定目录 <3>IIS上面建立网站…...
4.查询用户的累计消费金额及VIP等级
思路分析: (1)按照user_id及create_date 分组求消费金额total_amount (2)开窗计算同user_id下的累计销售金额sum(total_amount) over(partition by user_id order by create_date ROWS BETWEEN UNBOUNDED PRECEDING AN…...
解决MySQL错误-this is incompatible with sql_mode=only_full_group_by
报错 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘数据库名.表名.字段名’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_group_by 原因 MySQL错误-t…...
UDP通信-广播、组播
UDP的三种通信方式 单播:单台主机与单台主机之间的通信。 广播:当前主机与所在网络中的所有主机通信。 组播:当前主机与选定的一组主机的通信。 UDP如何实现广播 使用广播地址:255.255.255.255 具体操作: 发送端…...
防疫网站网页设计/网络营销推广8种方法
词向量模型 Word2Vec Skip-gram 模型是图嵌入模型 Random Walk 中要使用到的模型,因此先学习 Word2Vec 神经网络语言模型 NNLM 目标:根据给定的词序列,预测下一个会出现的词,如给定 “他”,“是”,“一个…...
找阿里巴巴购买做网站的软件/关于进一步优化落实疫情防控措施
图是要求的输出范例程序要求输入一个大于等于5的奇数n然后输出一个和示例图类似的特殊蛇形矩阵 中心是0然后向外展开要求是不能用数组和stdio.h以外的lib已经想了整整一下午了 完全没有任何思路.求大神帮帮忙想一下思路,不用写代码,帮忙想想思路就行.P.S. 若覺得我的答案不佳或…...
网站如何做自适应/seo软件工具箱
ER Master 数据库设计工具 ER Master 是一个用于设计ER模型图的Eclipse插件。提供的功能包括:从数据库导入关系生成ER图,导出设计图,导出DDL数据定义语句等。目前完整支持的数据库包括 MySQL、PostgreSQL 和-Oracle (developing)-DB2 (develo…...
wordpress推荐文章/百度推广收费多少
论文翻译 论文作者讲解 解决问题 现有评价标准过高的评估模型效果(现有标准一般是accuracy或者 F1 这种标准度量) 解决对策 由软件测试方法得来灵感 建立 CheckList 流程框架: 测试一些独立的最小单元组件(例如,区分词…...
一些js特效的网站推荐/西地那非
转载自点击打开链接 1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(d…...
中企动力做的网站后台如何登陆/推广普通话手抄报内容
Vue-Router 原理实现1.1Vue-Router 使用步骤1.2动态路由1.3嵌套路由1.4编程式导航1.5Hash 和 History 模式区别History 模式History 模式 - Node.jsHistory 模式 - nginx1.6Vue Router 实现原理Vue Router 模拟实现 ( History模式 )Vue Router - ConstructorVue Router - insta…...