Essential C++ 编程基础

Essential C++

  • 前言
    • 1.1 如何撰写 C++程序
    • 1.2 对象的定义与初始化
    • 1.3 撰写表达式
    • 1.4 条件语句和循环语句
    • 1.5 如何运用Array和Vector
    • 1.6 指针带来弹性
    • 1.7 文件的读写


前言

   通过Essential C++笔记的形式对C++相关重点知识进行汇总,读者通读此系列文章就可以轻松的把该语言基础捡起来。


1.1 如何撰写 C++程序

int main()
{
//    我们的程序代码置于此处
}

int是C++程序语言的关键字。

函数(function)是一块独立的程序代码序列(code sequence),能够执行一些运算。它包含四个部分:返回值类型(return type)、函数名称、参数列表(parameter list),以及函数体(function body)。

main并非是程序语言定义的关键字。但是,执行我们这个C++程序的编译系统,会假设程序中定义有main()函数。如果我们没有定义,程序将无法执行。

函数的参数列表(parameter list)由两个括号括住,置于函数名之后。空的参数列表,如main(),表示函数不接受任何参数。

int main(int val1, int val2)
{
//    我们的程序代码置于此处
}

函数的主体(body)由大括号({})标出,其中含有“提供此函数之运算”的程序代码。双斜线(//)表示该行内容为注释,也就是程序员对程序代码所做的某些说明。

所谓类(class),是用户自定义的数据类型(user-defined data type)。class机制让我们得以将数据类型加入我们的程序中,并有能力识别它们。

class机制,赋予了我们“增加程序内之类型抽象化层次”的能力。

class的定义,一般来说分为两部分,分别写在不同的文件中。其中之一是所谓的“头文件(header file)”,用来声明该 class 所提供的各种操作行为(operation)。另一个文件,程序代码文件(program text),则包含了这些操作行为的实现内容(implementation)。

欲使用class,我们必须先在程序中包含其头文件。头文件可以让程序知道class的定义。C++标准的“输入/输出库”名为iostream,其中包含了相关的整套class,用以支持对终端和文件的输入与输出。我们必须包含iostream库的相关头文件,才能够使用它:

#include

我将利用已定义好的cout(读作see out)对象,将信息写到用户的终端中。output运算符(<<)可以将数据定向到cout,像下面这样:

cout << “Please enter your first name”;

上述这行便是C++所谓的“语句(statement)”。语句是C++程序的最小独立单元。就像自然语言中的句子一样。语句以分号作为结束。

接下来我们要读取用户的输入内容。读取之前,我们必须先定义一个对象,用以储存数据。欲定义一个对象,必须指定其数据类型,再给定其标识符。截至目前,我们已经用过int数据类型。但是要用它来储存某人的名字,几乎是不可能的事。更适当的数据类型是标准库中的string class:

string user_name;

如此一来我们便定义了一个名为user_name的对象,它属于string class。这样的定义有个特别的名称,称为“声明语句(declaration statement)”。单只写下这行语句还不行,因为我们还必须让程序知道string class的定义。因此还必须在程序中包含string class的头文件:

#include

接下来便可利用已定义好的cin(读作see in)对象来读取用户在终端上的输入内容。通过input运算符(>>)将输入内容定向到具有适当类型的对象身上:

cin >> user_name;

为了产生上述信息,我们的第一个步骤便是将输出位置(屏幕上的光标)调到下一行起始处。将换行(newline)字符常量写至cout,便可达到这个目的:

cout << ‘\n’;

所谓字符常量(character literal)系由一组单引号括住。字符常量分为两类:第一类是可打印字符,例如英文字母(‘a’、‘A’,等等)、数字、标点符号(‘;’、‘-’,等等)。另一类是不可打印字符,例如换行符(‘\n’)或制表符(tab,‘\t’)。由于不可打印字符并无直接的表示法(这表示我们无法使用单一而可显示的字符来独立表示),所以必须以两个字符所组成的字符序列来表示。

#include <iostream>
#include <string>
using namespace std; // 命名空间
int main()
{string user_name;cout << "Please enter your first name: ";cin >> user_name;cout << '\n' << "Hello, " << user_name << "... and goodbye!\n";return 0;
}

using和namespace都是C++中的关键字。std是标准库所驻之命名空间(namespace)的名称。标准库所提供的任何事物(诸如string class以及cout、cin这两个iostream类对象)都被封装在命名空间std内。

所谓命名空间(namespace)是一种将库名称封装起来的方法。

通过这种方法,可以避免和应用程序发生命名冲突的问题(所谓命名冲突是指在应用程序内两个不同的实体〔entity〕具有相同名称,导致程序无法区分两者。命名冲突发生时,程序必须等到该命名冲突获得解析〔resolve〕之后,才得以继续执行)。命名空间像是在众多名称的可见范围之间竖起的一道道围墙。

若要在程序中使用string class以及cin、cout这两个iostream类对象,我们不仅需要包含<string>及<iostream>头文件,还得让命名空间std内的名称曝光。

1.2 对象的定义与初始化

已知某数列相邻的两个元素值分别为2和3,试问下一个值是多少?

这两个数字事实上是“斐波那契数列(Fibonacci sequence)”中的第三和第四个元素。斐波那契数列的前几个值分别是:1,1,2,3,5,8,13…。斐波那契数列的开头两个数设定为1,接下来的每个数值都是前两个数值的总和。(

如果用户输入5,我们就打印出信息,恭喜他答对,并询问他是否愿意试试另一个数列。如果用户输入不正确的值,我们就询问他是否愿意再试一次。

为了提升程序的趣味性,我们将用户答对的次数除以其回答总次数,以此作为评价标准。

这样一来,我们的程序至少需要五个对象:
一个string对象用来记录用户的名字,
三个整数对象分别储存用户回答的数值、用户回答的次数,以及用户答对的次数;
此外还需要一个浮点数,记录用户得到的评分。

为了定义对象,我们必须为它命名,并赋予它数据类型。对象名称可以是任何字母、数字、下画线(underscore)的组合。大小写字母是有所区分的,user_name、User_name、uSeR_nAmE、user_Name所代表的对象各不相同。

每个对象都属于某个特定的数据类型。对象名称如果设计得好,可以让我们直接联想到该对象的属性。数据类型决定了对象所能持有的数值范围,同时也决定了对象应该占用多少内存空间。

所谓 class,便是程序员自行定义的数据类型。

每一个内置数据类型都有一个相应的关键字,用于指定该类型。。例如,为了储存用户输入的值,我们定义一个整数对象:

int usr_val;

int是C++关键字,此处用来指示 usr_val是个整数对象。用户的“回答次数”以及“总共答对次数”也都是整数,唯一差别是,我们希望为这两个对象设定初值0。下面这两行可以办到:

int num_tries = 0;
int num_right = 0;

1.3 撰写表达式

1.4 条件语句和循环语句

1.5 如何运用Array和Vector

1.6 指针带来弹性

1.7 文件的读写

对文件进行读写操作需要包含fstream头文件
#include

打开可供输出的文件,需要定义一个ofstream对象,并将文件名传入:
// 以输出模式开启seq_data.txt
ofstream outfile(“seq_data.txt”)

声明outfile的同时,会发生什么事情?

如果文件已经存在,希望将新数据增加到该文件中,需要以追加模式(append mode)打开这个文件,为此,我们提供第二个参数ios_base::app给ofstream对象。

// 以追加模式打开seq_data.txt, 新数据会被加到文件末尾
ofstream outfile("seq_data.txt", ios_basea::app);
// 如果outfile的求值结果为false,表示此文件并未成功打开
if(!outfile)
{//        因为某种原因,档案无法开启cerr << "Oops! Unable to save session data!\n";}else{//        ok: outfile 开启成功,接下来将数据写入outfile << usr_name << ' '<< num_tries << ' '<< num_right << endl;
}

endl 是事先定义好的所谓操纵符。endl会插入一个换行符,并清除输出缓冲区(output buffer)的内容。

如果要打开一个可供读取的文件,定义一个ifstream(供输入file stream)对象,并将文件名传入。

// 以读取模式(input mode)打开infile
ifstream infile("seq_data.txt")
int num_tries = 0;
int num_cor = 0;if(! infile)
{
//    由于某种原因,文件无法打开...
//    我们将假设这是一位新的用户...
}else{
//    ok: 读取档案中的每一行
//    检查这个用户是否曾经玩过
//    每一行的格式是:
//    name num_tires num_correct
//    nt: 猜过的总次数(num_tries)
//    nc: 猜对的总次数(num_correct)string name;int nt;int nc;// while 循环的每次迭代都会读取文件的下一行内容while(infile >> name){// 先将用户猜过的总次数读到nt之中,再将用户猜对的总次数读到nc之中infile >> nt >> nc;if(name == usr_name){//        找到他了cout << "Welcom back, " << usr_name<< "\n Your current socre is " << nc<< " out of " << nt << "\n Good Luck!\n";num_tries = nt;num_cor = nc;}}
}

如果想要同时读写同一个文件,我们得定义一个fstream对象。为了以追加模式打开,需要传入第二参数值 ios_base;:in|ios_base::app;

tstream iofile("saq data.txt",ios_base::in|ios_bane::app)if(!iofile)
{//由于某种原因,文件无法开启……·真糟! 
}else{//开始读取之前,将文件重新定位至起始处iofile.seaxg( 0);//其它部分都和先前讨论的相同
}

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

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

相关文章

纯国产轻量化数字孪生:智慧城市、智慧工厂、智慧校园、智慧社区。。。

AMRT 3D数字孪生引擎介绍 AMRT3D引擎是一款融合了眸瑞科技的AMRT格式与轻量化处理技术为基础&#xff0c;以降本增效为目标&#xff0c;支持多端发布的一站式纯国产自研的CS架构项目开发引擎。 引擎包括场景搭建、UI拼搭、零代码交互事件、光影特效组件、GIS/BIM组件、实时数据…

五、数组——Java基础篇

六、数组 1、数组元素的遍历 1.1数组的遍历&#xff1a;将数组内的元素展现出来 1、普通for遍历&#xff1a;根据下表获取数组内的元素 2、增强for遍历&#xff1a; for&#xff08;数据元素类型 变量名&#xff1a;数组名&#xff09;{ 变量名&#xff1a;数组内的每一个值…

【vue+leaflet】vue使用leaflet.pm保存绘制后的图层的点位信息、图层回显、平面图切换、地图事件函数、图层事件函数说明(二)

看效果展示: 【vueleaflet】第二节效果展示视频 1.平面图切换,多个平面图切换展示 <div class"select"><span>平面图&#xff1a;</span><el-select v-model"pic" placeholder"全部" clearable filterable change"ini…

机器学习.线性回归

斯塔1和2是权重项&#xff0c;斯塔0是偏置项&#xff0c;在训练过程中为了使得训练结果更加精确而做的微调&#xff0c;不是一个大范围的因素&#xff0c;核心影响因素是权重项 为了完成矩阵的运算&#xff0c;在斯塔0后面乘x0&#xff0c;使得满足矩阵的转换&#xff0c;所以在…

信息安全管理与评估赛题解析-通信数据(含环境)

通信数据分析 文章目录 通信数据分析1.pcapng:被入侵主机的IP是?被入侵主机的口令是?用户目录下第二个文件夹的名称是?/etc/passwd中倒数第二个用户的用户名是?2.pcapng:服务器自带的后门文件名是什么?服务器的内网IP是多少?攻击者往服务器中写入的key是什么?相关资源…

编码后的字符串lua

-- 长字符串 local long_string "你好你好你好你好你好你好你好你好" local encoded_string "" for i 1, #long_string do local char_code string.byte (long_string, i) encoded_string encoded_string .. char_code .. "," end encoded_…

redis数据结构源码分析——压缩列表ziplist(I)

前面讲了跳表的源码分析&#xff0c;本篇我们来聊一聊另外一个重点结构——压缩列表 文章目录 存储结构字节数组结构节点结构 压缩编码zipEntryzlEntry ZIP_DECODE_PREVLENZIP_DECODE_LENGTH API解析ziplistNew(创建压缩列表)ziplistInsert(插入)ziplistDelete(删除)ziplistFi…

复旦大学EMBA联合澎湃科技:共议科技迭代 创新破局

1月18日&#xff0c;由复旦大学管理学院、澎湃新闻、厦门市科学技术局联合主办&#xff0c;复旦大学EMBA项目、澎湃科技承办的“君子知道”复旦大学EMBA前沿论坛在厦门成功举办。此次论坛主题为“科技迭代 创新破局”&#xff0c;上海、厦门两地的政策研究专家、科学家、科创企…

CCAA审核员职业健康安全管理体系基础考试大纲

职业健康安全管理体系基础考试大纲&#xff08;第1版&#xff09; 1.总则 本大纲依据CCAA《管理体系审核员注册准则》制定&#xff0c;适用于拟向CCAA申请注册职业健康安全管理体系审核员实习级别的人员。 2.考试要求 2.1考试科目 申请注册职业健康安全管理体系审核员实习…

2024年漳州本地有正规等保测评机构吗?在哪里?

我们大家都知道&#xff0c;企业办理等保一定要找有资质的等保测评机构。因此不少漳州企业在问&#xff0c;2024年漳州本地有正规等保测评机构吗&#xff1f;在哪里&#xff1f;这里我们小编通过查找来为大家解答一下&#xff0c;仅供参考&#xff01; 目前福建漳州本地没有正规…

10 Redis之SB整合Redis+ 高并发问题 + 分布式锁

7. SB整合Redis Spring Boot 中可以直接使用 Jedis 实现对 Redis 的操作&#xff0c;但一般不这样用&#xff0c;而是使用 Redis操作模板 RedisTemplate 类的实例来操作 Redis。 RedisTemplate 类是一个对 Redis 进行操作的模板类。该模板类中具有很多方法&#xff0c;这些方…

HTTP---------状态码

当服务端返回 HTTP 响应时&#xff0c;会带有一个状态码&#xff0c;用于表示特定的请求结果。比如 HTTP/1.1 200 OK&#xff0c;里面的 HTTP/1.1 表示协议版本&#xff0c;200 则是状态码&#xff0c;OK 则是对状态码的描述。 由协议版本、状态码、描述信息组成的行被称为起始…

SpringBoot中Websocket的简单使用

目录 1 Websocket的定义及一些使用场景 2 使用方法 2.1 导入依赖坐标 2.2 创建WebSocket服务 2.3 编写配置类注册WebSocket 2.4 在需要处使用WebSocket服务 1 Websocket的定义及一些使用场景 定义&#xff1a;Websocket实现了浏览器与服务器全双工通信一浏览器和服务器只…

WebSocket服务多节点部署问题及解决方案

多节点部署问题 伪广播问题&#xff1a;在多节点部署时&#xff0c;每个节点只能向与其直接连接的客户端广播消息&#xff0c;导致其他节点的客户端无法接收到消息。 解决方案 使用消息中间件&#xff1a;引入如Redis PUBSUB或Kafka等消息中间件&#xff0c;作为所有节点共享…

C语言:苹果和虫子

题目描述 你买了一箱n个苹果&#xff0c;很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果&#xff0c;假设虫子在吃完一个苹果之前不会吃另一个&#xff0c;那么经过y小时你还有多少个完整的苹果&#xff1f; 输入输出格式 输入格式 输入仅一行&#xff0c…

北京硒鼓耗材回收价位,硒鼓回收价格,回收

联系我的时候请说是在百猫网看到的&#xff01; 硒鼓回收价格&#xff1a;最专业的硒鼓回收 顺达耗材回收 俗话说&#xff0c;顾客是最好的&#xff0c;良好的品牌效应是推动发展的关键之一。 北京顺达耗材回收有限公司为中小企业创造良好的二手消费市场&#xff0c;不断贯彻…

皓学IT:MySQL02

一、了解表 1.1.概述 表是处理数据和建立关系型数据库及应用程序的基本单元&#xff0c;是构成数据库的基本元素之一&#xff0c;是数据库中数据组织并储存的单元&#xff0c;所有的数据都能以表格的形式组织&#xff0c;目的是可读性强。 1.2.表结构简述 一个表中包括行和列…

Go语言开发小技巧易错点100例(十三)

往期回顾&#xff1a; Go语言开发小技巧&易错点100例&#xff08;一&#xff09;Go语言开发小技巧&易错点100例&#xff08;二&#xff09;Go语言开发小技巧&易错点100例&#xff08;三&#xff09;Go语言开发小技巧&易错点100例&#xff08;四&#xff09;Go…

微服务流量控制组件Sentinel

启动Sentinel控制台 从github下载jar包执行java -Dserver.port9005 -jar sentinel-dashboard-1.8.7.jar 启动控制台登录控制台,账号密码默认 sentinel sentinel.dashboard.auth.username -----指定用户名启动sentinel.dashboard.auth.password -----指定密码启动 微服务引入依赖…

Uncertainty-Aware Mean Teacher(UA-MT)

Uncertainty-Aware Mean Teacher 0 FQA:1 UA-MT1.1 Introduction:1.2 semi-supervised segmentation1.3 Uncertainty-Aware Mean Teacher Framework 参考&#xff1a; 0 FQA: Q1: 不确定感知是什么意思&#xff1f;不确定信息是啥&#xff1f;Q2&#xff1a;这篇文章的精妙的点…