从0开始C++(一)

目录

c++的基本介绍

C语言和C++ 的区别

面向过程和面向对象的区别 

引用

引用使用的注意事项

赋值

终端输入

cin

getline

string字符串类

遍历方式

字符串和数字转换

函数

内联函数

函数重载overload

小练习:

参考代码


c++的基本介绍

C++是一种通用的高级编程语言,它是从C语言发展而来的。C++在C语言的基础上增加了许多新的特性和功能,使得它成为一种更强大、更灵活的编程语言。

C++具有面向对象的编程能力,可以使用类和对象来组织和管理代码。它支持封装、继承和多态等面向对象编程的特性,可以更好地组织和管理大型项目的代码。

C++也可以进行底层系统编程,它提供了许多与硬件交互和操作系统相关的功能,例如内存管理、指针操作和文件读写等。

C++是一种编译型语言,它将源代码编译成机器码,然后可以在各种不同的平台上运行。C++的编译器非常普及,几乎可以在任何操作系统上找到,包括Windows、Linux、Mac等。

C++具有高性能和效率,它可以直接访问内存和硬件资源,不需要依赖其他高级语言的运行时环境。这使得C++成为一种特别适合开发性能敏感的应用程序,如游戏引擎、图形界面和嵌入式系统等。

总的来说,C++是一种功能强大、灵活且高效的编程语言,适用于各种不同的应用场景和项目规模。

C语言和C++ 的区别

  1. 面向对象:C++引入了面向对象编程的概念,允许使用类、对象、继承、多态等特性进行程序设计,而C语言则没有这些特性。

  2. 类型检查:C++具有更严格的类型检查机制,可以在编译阶段捕获更多的类型错误,提高了程序的安全性和可靠性。而C语言对类型检查的支持较弱。

  3. 标准库:C++标准库提供了更多的功能和组件,如容器、算法、文件操作等,使得开发更加方便,而C语言的标准库相对较小。

  4. 异常处理:C++支持异常处理的机制,可以捕获和处理程序运行时的异常情况,而C语言没有这个特性。

  5. 扩展性:C++允许通过编写类的扩展来实现新的功能,而C语言则需要通过编写新的函数来实现。

  6. 兼容性:C++是C语言的超集,几乎所有的C语言代码都可以在C++中编译和运行,但C++还引入了一些新的特性和语法,可能导致部分C语言代码无法在C++中编译。

总的来说,C++在C语言的基础上引入了面向对象编程的特性,并提供了更多的功能和安全性,适用于更复杂的程序开发。而C语言更加简洁和灵活,适用于一些对性能要求较高、对功能要求较简单的场景。

面向过程和面向对象的区别 

【思考】如果把大象装进冰箱,应该怎么做?

1、  (我)打开冰箱

2、  (我)把大象放进去

3、  (我)把冰箱关上

 上面的这种方式就是典型的面向过程编程思想,这种思想关注的重点是“过程”,过程指的是一系列有序的步骤,只需要按照这个步骤来做,就可以得到预想的结果。这种思维方式偏向于计算机执行命令的本质。这种程序的特点是执行效率高(因为都是亲历亲为)。适合小体量软件项目编程,偏向性能的项目一般这样做。

使用面向对象的思想把大象装进冰箱。

1、  (我)把大象和冰箱拟人化。

2、  (我)给大象和冰箱安排任务。

3、  (自动)大象和冰箱执行任务。

面向对象的语言,关注的重点是“对象 ”。在计算机中对象可以理解为一些列由于某种联系聚焦在一起的数据,在编程的过程中处理对象之间的关系。这种思考方式更近于人类的方式。这样的程序缺点在于执行效率底,但是编程效率高,适合大规模的软件项目。

总的来讲,面向过程是以“怎么解决问题”为核心,面向对象是以“谁来解决问题”为核心。

引用

引用从一定程度上讲是c语言中指针的平替,几乎被所有的面向对象编程语言所使用。引用相当于对某一目标变量起一个”别名“, 操作引用与操作原变量完全一样。(ps:你要抓鲁迅确实关周树人的事)
#include <iostream>using namespace std;int main()
{int a = 1;int &b = a; // b是a的引用b++;cout << a << " " << &a << endl; // 2 0x61fe88cout << b << " " << &b << endl; // 2 0x61fe88return 0;
}

引用使用的注意事项

1、可以改变引用的值,但是不能成为其他变量的引用。

实例:

#include <iostream>using namespace std;int main()
{int a = 1;int &b = a; // b是a的引用int c = 3;b = c;  // 赋值,不是引用,b还是a的引用b++;cout << a << " " << &a << endl; // 4 0x61fe88cout << b << " " << &b << endl; // 4 0x61fe88cout << c << " " << &c << endl; // 3 0x61fe84return 0;
}

2、声明引用时,必须要初始化

实例:

#include <iostream>using namespace std;int main()
{int a = 1;
//    int &b; // 错误引用,必须初始化return 0;
}

3、引用不能初始化为空

实例:

#include <iostream>using namespace std;int main()
{int a = 1;
//    int &b = NULL;    // 错误引用不能初始化null
//    int &c = nullptr;   // 错误引用不能初始化nullptrreturn 0;
}

4、声明引用的时候,初始化的值可以为纯数值,但是必须用 const 来修饰引用,表示引用为常量引用。

实例:

#include <iostream>using namespace std;int main()
{const int &b = 12;  // 常量引用
//    b = 444; // 错误 常量引用的值无法被改变cout << b << " " << &b << endl;return 0;
}

5、可以将引用的地址赋值给一个指针,此时指针指向的还是原来的变量。

实例:

#include <iostream>using namespace std;int main()
{int a = 1;int &b = a;int *c = &b;    // c同时指向了A和Bcout << a << " " << &a << endl; // 1 0x61fe84cout << b << " " << &b << endl; // 1 0x61fe84cout << *c << " " << c << endl; // 1 0x61fe84return 0;
}

6、可以使用const修饰引用,此时,无法直接通过引用改变原来的值,但是如果原来变量的值改变,引用的值也跟着改变。

实例:

#include <iostream>using namespace std;int main()
{int a = 2;const int &b = a;
//    b++; // 错误 b是只读的a++;cout << a << " " << &a << endl; // 1 0x61fe84cout << b << " " << &b << endl; // 1 0x61fe84return 0;
}

7、引用作为参数进行定义的时候,在参数传参时,是不会产生副本的,这样可以提高程序的运行效率在我们正常编程中,建议使用引用作为传递参数。引用参数不需要参与计算时,建议使用const进行修饰,避免误修改,提高引用的安全性。

实例:

#include <iostream>using namespace std;// 函数的功能是交换两个传入的参数原来变量的值。
void test(int &a,int &b)
{a = a^b;b = a^b;a = a^b;
}
// 输出。
void test2(const int &a,const int &b)
{cout << "a = " << a << endl;cout << "b = " << b << endl;
}int main()
{int a1 = 1;int b1 = 2;test(a1,b1);test2(a1,b1);return 0;
}

赋值

通常编程中使用=进行赋值,C++新增了以下赋值语法。

#include <iostream>using namespace std;int main()
{int a(1);   // int a = 1;cout << a << endl;int b(a);   // int b = a;cout << b << endl;int c(a+b); // int c = a + b;cout << c << endl;double d = 3.14;int d2(d);cout << d2 << endl; // 输出为3,浮点型转int型时会进行数据窄化处理,舍弃小数点后的数值(不会报错和警告)int d3{d};  // C++11对此进行了升级:对数据窄化会做出警告(只是有个警告,其他没有任何改变)cout << d3 << endl; // 3return 0;
}

终端输入

cin

 可以使用cin吧用户在命令行中输入的内容赋值到变量中, cin cout 一样都属于 iostream 中的标准输入输出流。(遇到空格就会结束)

实例:

#include <iostream>using namespace std;int main()
{int a;// C++的字符串stringstring str;cout << "请输入一个数字和字符串" << endl;cin >> a >> str;    // 接收键盘输入,一个整数和一个字符串。可以连续操作cout << a << " " << str << endl;return 0;
}

getline

如果cin输入的字符串需要包含空格可以使用 getline(cin,str) 的方式

#include <iostream>using namespace std;int main()
{// C++的字符串stringstring str;cout << "请输入一个字符串,可以包含空格,输入完成后点击回车" << endl;getline(cin,str);cout << str << endl;return 0;
}

string字符串类

string不是C++的基本数据类型,他是一个C++标注库中的字符串,使用时需要引入头文件#include<string>
string在绝大多数情况下可以替代C语言中的字符串,不必担心内存是否足够或字符串长度等。其中内部还包含了很多字符串处理函数,可以完成各种情况下的字符串处理功能。

string和C语言相同,字符串编码使用ASCII编码,不支持中文。

#include <iostream>using namespace std;int main()
{string str = "helloworld";cout << str.size() << endl; // 10cout << str.length() << endl; // 10cout << str.at(1) << endl;  // ereturn 0;
}

遍历方式

string支持多种遍历方式

1、普通遍历(以for循环为主)

#include <iostream>using namespace std;int main()
{string str = "helloworld";// 以for循环的方式遍历输出字符串for(int i = 0;i < str.size();i++){cout << str.at(i);}cout << endl;return 0;
}

2、for each遍历方法

#include <iostream>using namespace std;int main()
{string str = "helloworld";// 以 for each的方式进行循环遍历字符串for(char i:str){cout << i;}return 0;
}

字符串和数字转换

istringstream:字符串转int类型

stringstream:int类型转字符串

#include <iostream>
#include <sstream>  // 字符串流using namespace std;int main()
{string s = "123";
//    int i = s; // 错误int i = 0;// string → intistringstream iss(s);iss >> i;cout << i << endl;// int → string
//    string s2 = i; // 错误stringstream ss;ss << i;string s2 = ss.str();cout << s2 << endl;return 0;
}

函数

内联函数

内联函数用于取代C语言中宏定义的函数,使用inline修饰,将函数声明为内联函数。内联函数的正确使用可以提升程序的执行效率。内联函数在编译的时候,直接把函数体展开到主函数中编译,在运行时可以减少调用的开销。

虽然我们使用inline将函数进行了声明,但是函数执行时到底是不是内联函数,这个不是我们能决定的。编译器有自己的判断准则,我们只是给编译器提一个建议,具体是否变为内联函数,还是编译器自己决定的。

通常将具有以下性质的函数写为内联函数。

● 代码长度很短(5行以内)

● 不包含复杂的控制语句

● 频繁被调用

#include <iostream>using namespace std;
// 内联函数
inline void pint_string(string str)
{cout << str << endl;
}int main()
{pint_string("helloworld");return 0;
}

函数重载overload

C++中允许多个函数使用同一个名称,这种用法就是函数重载,函数重载要求函数名称相同,但是参数不同(类型或者数量、前后顺序不同)。与返回值等其他因素无关。

#include <iostream>using namespace std;void print_show(int i)
{cout << "调用了int重载" << i << endl;
}// 错误名称一样,参数一样编译器无法区分
//void print_show(int d)
//{
//    cout << "调用了int2重载" << d << endl;
//}void print_show(string str)
{cout << "调用了string重载" << str << endl;
}// 错误与返回值类型无关
//string print_show(string str)
//{
//    cout << "调用了string重载" << str << endl;
//    return str;
//}void print_show(double d)
{cout << "调用了double重载" << d << endl;
}int main()
{print_show(1.2);return 0;
}

哑元函数

函数的参数只有类型,没有名称,这样参数的就是哑元函数。

作用1:哑元函数用来区分函数重载

作用2:运算符重载中用到

作用3:历史遗留,向上兼容。

#include <iostream>using namespace std;// 哑元函数
void print_show(int t)
{cout << "调用了int哑元函数" << t << endl;
}void print_show(int i)
{cout << "调用了int函数" << i << endl;
}int main()
{print_show(1,2);return 0;
}

小练习:

1、键盘输入一个100-999之间的数,依次输出这个数的个十百位。

2、输入一行字符串,分别统计出其中的英文字母,数字和其他字符的个数。

参考代码

#include <iostream>using namespace std;void practice1()
{int a;while(1){cout << "请输入一个100-999之间的数:";cin >> a;if(a<100 || a>999){cout << "错误:请输入100-999!" << endl;continue;}cout << "百位:" << a/100 << "  十位:" << (a/10)-(a/100)*10 <<"  个位:" << a-(a/10)*10 << endl;}}void practice2()
{string str;int n=0;int c=0;int t=0;while(1){cout << "请输入一个字符串:";getline(cin,str);for( char i:str){if(('a' <= i && i <= 'z')||('A' <= i && i <= 'Z')){++c;}else if('0' <= i && i <= '9'){++n;}else{++t;}}cout << "数字个数:" << n <<endl;cout << "字母个数:" << c <<endl;cout << "其他字符个数:" << t <<endl;}}int main()
{//    practice1();practice2();return 0;
}

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

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

相关文章

Unity基础(一)unity的下载与安装

目录 一:下载与安装 1.官网下载地址 2.推荐直接下载UnityHub 3.选择编辑器版本(推荐长期支持版) 4.在UnityHub安装选择相应的模块 二:创建项目 简介: Unity 是一款广泛应用的跨平台游戏开发引擎。 它具有以下显著特点&#xff1a; 强大的跨平台能力&#xff1a;能将开发的游…

JavaScript之内置对象

内置对象 JavaScript中的对象分为3种&#xff1a;自定义对象、内置对象、浏览器对象前面两种对象是javascript基础内容&#xff0c;属于ECMAScript&#xff1b;第三个浏览器对象属于我们javascript独有的&#xff0c;我们javascript API讲解 内置对象就是指javascript语言自带…

ssldump一键分析网络流量(KALI工具系列二十二)

目录 1、KALI LINUX 简介 2、ssldump工具简介 3、在KALI中使用ssldump 3.1 目标主机IP&#xff08;win&#xff09; 3.2 KALI的IP 4、操作示例 4.1 监听指定网卡 4.2 指定端口 4.3 特定主机 4.4 解码文件 4.5 显示对话摘要 4.6 显示加密数据&#xff08;需要私钥&…

Spring boot 启动报:Do not use @ for indentation

一、使用maven插件动态切换配置时出现报错 二、配置文件及pom 2.1 配置文件结构 2.2 application.yml spring: # 根据环境读取配置文件&#xff08;手动&#xff09; # profiles: # active: dev# 根据环境读取配置文件&#xff08;通过勾选maven插件&#xff09;profiles…

神仙级AI大模型入门教程(非常详细),从零基础入门到精通,从看这篇开始!

一.初聊大模型 1.为什么要学习大模型&#xff1f; 在学习大模型之前&#xff0c;你不必担心自己缺乏相关知识或认为这太难。我坚信&#xff0c;只要你有学习的意愿并付出努力&#xff0c;你就能够掌握大模型&#xff0c;并能够用它们完成许多有意义的事情。在这个快速变化的时…

codeforces round 953 div2

A Alice and books 题目&#xff1a; 思路&#xff1a;编号最大的肯定会被读到&#xff0c;所以在编号最大的这一组书中不能存在除去最大编号的外书外页数最大的书&#xff0c;并且在另一堆中这本书的编号也应该是最大值 代码&#xff1a; #include <iostream>using…

郑州设计资质延续流程:人员社保的审核标准是什么?

郑州设计资质延续流程中&#xff0c;人员社保的审核标准如下&#xff1a; 一、社保缴纳期限 审核标准&#xff1a;人员&#xff08;技术负责人、注册人员等&#xff09;的社保考核期限恢复为3个月。需要提供相关人员至少连续3个月的社保缴纳记录。 二、社保缴纳主体 审核标准…

python 【包含数据预处理】基于词频生成词云图

基于词频生成词云图 背景目的 有一篇中文文章&#xff0c;或者一本小说。想要根据词频来生成词云图。 为什么中文需要分词 中文分词是理解和处理中文文本的关键步骤&#xff0c;它直接影响到后续的文本分析和信息提取的准确性和有效性。 无明显单词分隔&#xff1a;中文文本不…

Einops 张量操作快速入门

张量&#xff0c;即多维数组&#xff0c;是现代机器学习框架的支柱。操纵这些张量可能会变得冗长且难以阅读&#xff0c;尤其是在处理高维数据时。Einops 使用简洁的符号简化了这些操作。 Einops &#xff08;Einstein-Inspired Notation for operations&#xff09;&#xff…

温度传感器NST175手册阅读

温度传感器NST175手册阅读 首先看芯片的输入和输出&#xff1a;主要关注IIC接口&#xff0c;毕竟是要驱动这个芯片读取温度。在编写此博客时还未对改温度传感器进行调试&#xff0c;只是阅读手册&#xff0c;把需要重点关注的地方标记出来。 一、芯片管脚 二、温度输出格式 …

618大促背后:优秀制造企业如何精准备货?

618这场年中购物盛宴点燃了消费者的热情。而在背后&#xff0c;是许许多多的制造企业在默默发力&#xff0c;对于他们来说&#xff0c;这不仅仅是一个促销的机会&#xff0c;更是一个检验供应链响应速度、库存管理能力以及市场洞察力的关键时刻。那么&#xff0c;优秀的制造企业…

WACV2024检测Detection论文49篇速览

WACV2024 Detection论文摘要速览49篇 Paper1 CLRerNet: Improving Confidence of Lane Detection With LaneIoU 摘要小结: 车道线检测是自动驾驶和驾驶辅助系统中的关键组成部分。现代基于锚点的深度车道检测方法在车道检测基准测试中表现出色。通过初步的实验&#xff0c;我们…

macbook屏幕录制技巧,这2个方法请你收好

在当今数字化时代&#xff0c;屏幕录制成为了一项不可或缺的技能&#xff0c;无论是教学演示、游戏直播&#xff0c;还是软件操作教程&#xff0c;屏幕录制都能帮助我们更直观地传达信息。MacBook作为苹果公司的标志性产品&#xff0c;其屏幕录制功能也备受用户关注。本文将详细…

区区微服务,何足挂齿?

背景 睿哥前天吩咐我去了解一下微服务&#xff0c;我本来想周末看的&#xff0c;结果周末没带电脑&#xff0c;所以只能周一看了。刚刚我就去慕课网看了相关的视频&#xff0c;然后写一篇文章总结一下。这篇文章算是基础理论版&#xff0c;等我之后进行更多的实践&#xff0c;…

帕金森患者在饮食上需要注意什么

帕金森病患者在饮食上应该遵循以下几个基本原则&#xff1a; 饮食清淡&#xff1a;应多吃新鲜的水果和蔬菜&#xff0c;如苹果、芹菜、菠菜等&#xff0c;以补充维生素和促进胃肠道蠕动。营养均衡&#xff1a;应多吃富含优质蛋白的食物&#xff0c;如鸡蛋、牛奶&#xff0c;以…

Swift开发——元组

Swift语言的数据类型包括整型、浮点型、字符串、布尔型、数组、元组、集合和字典等,本文将详细介绍元组。 01、元组 严格意义上,元组不属于数据类型,而属于数据结构。元组将一些变量或常量或字面量组织成一个有序的序列,索引号从0开始,用圆括号“()”括起来,各个元素间用…

hive 安装 嵌入模式 笔记

$ hive $ HIVE_HOME/bin/schematool -dbType derby –initSchema $ schematool -verbose -validate -dbType derby $HIVE_HOME/bin/hiveserver2 这个启动了先不要关闭&#xff0c;再打开一个终端进行下面的步骤 Beeline -u &#xff08;用自己的名字和密码&#xff09; show d…

毕业答辩PPT:如何在短时间内高效准备?

提起PPT&#xff0c;大家的第一反应就是痛苦。经常接触PPT的学生党和打工人&#xff0c;光看到这3个字母&#xff0c;就已经开始头痛了&#xff1a; 1、PPT内容框架与文案挑战重重&#xff0c;任务艰巨&#xff0c;耗费大量精力。 2、PPT的排版技能要求高&#xff0c;并非易事…

眼镜片怎么洗?眼镜清洗有哪些方法?超声波清洗机能洗眼镜吗?

现在戴眼镜的人有很多&#xff0c;但是所谓的戴眼镜容易&#xff0c;清洗眼镜却是比较难的一件事&#xff01;不要以为眼镜好像看着不脏&#xff0c;然后随便用眼镜布擦一下就完事了……其实不是的&#xff01; 眼镜片上面有细小的灰尘颗粒&#xff0c;而随着我们用眼镜布擦眼…

css之sprite

css之sprite 图片整合 sprite 优势 整合的方法 ps 新建图层&#xff08;名字为英文、给定宽高、选择像素、背景内容设置透明、创建&#xff09;ctrlc复制小图 ctrlv 粘贴 选择工具移动位置裁剪工具&#xff0c;剪掉下方多余的位置 enter导出&#xff08;PNG&#xff09; 精灵…