C++(标准输入输出流、命名空间、string字符串、引用)

C++特点及优势

        (1)实现了面向对象,在高级语言中,处理运行速度是最快;
        (2)非常灵活,功能非常强大,相对于C的指针优势,C++的优势为性能和类层次结构;
        (3)严谨、精确和数理化........

C++和C语言的区别

        C语言是面向过程的语言,C++是面向对象的语言。

        C++兼容C语言的头文件 #include <cstdio>

标准输入输出

输出流对象(std::cout<<)

        可以自动识别基本类型的输出类型

编译:g++ demo.cpp 

输入流对象(std::cin>>)

        自动识别基本类型的数据类型 

练习:输入一个字符 如果是大写 则转为小写 如果是小写则转为大写

#include <iostream>
int main()
{char c;std::cin >> c;if (c >= 'a' && c <= 'z'){//a = a - 32;std::cout << (char)(c - 32) << std::endl;}else if(c >= 'A' && c <= 'Z'){c += 32;std::cout << c << std::endl;}return 0;
}

cin同时获取多个值

#include <iostream>
int main(int argc, char const *argv[])
{int a;char c;std::cin >> a >> c;std::cout << a << " " << c << std::endl;return 0;
}

命名空间

        避免命名空间污染,C++的标准库都是在std命名空间中定义的(所有的类和对象)。

表示方法

        方式一:using namespace std;
        方式二:std::cout

自定义命名空间 

#include <iostream>
using namespace std;
namespace teacher
{char name[20] = "zhangsan";void showName(){cout << name << endl;}
}
namespace worker
{char name[20] = "lisi";void showName(){cout << name << endl;}
}
using namespace teacher;
using namespace worker;
int main(int argc, char const *argv[])
{//cout << name << endl;    //报错的位置cout << teacher::name << endl;cout << worker::name << endl;cout << "-----------" << endl;teacher::showName();worker::showName();return 0;
}

         teacher和worker命名空间中都有name,如果不写命名空间,会出现访问不明确的错误。 

C++增加bool类型

        (1)bool是基本数据用来表示逻辑真假
        (2)非0为真 true,0为假 false
        (3)增强程序可读性 int isFull();  bool isFull();

字符串处理

        (1)延续C风格,字符数组 char s[20] = "hello";        字符指针 char *s = "hello";
        (2)C++标准库中string类(string不是基本数据类型,而是类类型,对象类型)

创建string对象

#include <iostream> // iostream头文件中包含string头文件,所以可以省略
//#include <string>
using namespace std;
int main()
{string s1 = "hello world";string s2("hello s2");string s3(s2); // s3是用s2复制的string类型对象string s4 = s1; //string对象复制可以通过赋值符号=,直接将值赋予目标对象	cout << "s1:" << s1 << endl;cout << "s2:" << s2 << endl;cout << "s3:" << s3 << endl;cout << "s4:" << s4 << endl;return 0;
}

字符串拼接和比较

        string只能拼接string,拼接其他类型需要使用sprintf()进行复杂的字符串格式化

#include <iostream>
#include <string>
using namespace std;
int main()
{string s1 = "hello";string s2 = "world";s1 += s2;//把s2的字符串追加到s1后面cout<<s1<<endl;//s1 += 1;//错误 string类型的拼接,只能拼接string类型或者C风格字符串char buf[100];sprintf(buf,"%s%d",s1.c_str(),1);//c_str():string类型或者C风格字符串cout<<buf<<endl;//字符串比较cout<<(s1 == s2)<<endl; // 比较的是第一个不相等的ASCII码值cout<<(s1 != s2)<<endl;return 0;
}

empty和size函数

        empty()判断空,如果字符转为空,返回true;否则,返回false
        size()返回字符串长度,和strlen()相同 

#include <iostream>
using namespace std;
int main()
{string s1 = " ";cout << s1.empty() << endl;string s2 = "";cout << s2.empty() << endl;string s3 = "hello world";cout << s3.size() << endl;return 0;
}

cin和getline函数输入字符串

        cin遇到空格结束
        getline函数,输入字符串遇到'\n'结束输入(C++中无法使用gets函数,所以用此函数)

#include <iostream>
using namespace std;
int main()
{string s1;cout << "please input s1" << endl;// 参数1:cin输入流获取字符串,参数2:读取到的字符串存放为止getline(cin,s1);cout << "getine s1:" << s1 << endl;string s2;cout << "please input s2" << endl;cin >> s2;cout << "cin s2:" << s2 << endl;return 0;
}

引用

        引用的本质就是给变量起别名。

#include <iostream>
using namespace std;
int main()
{int a = 10;int& b = a;return 0;
}

特点(重点)

        (1)必须进行初始化
        (2)引用不能单独存在,也不能改变指向
        (3)普通引用不能用常量或者临时值进行初始化

引用作为形参类型 

交换a,b的值

#include <iostream>
using namespace std;
void swap(int& x,int& y)
{int temp;temp = x;x = y;y = temp;
}
int main()
{int a = 10,b = 20;swap(a,b);cout << a << " " << b << endl;return 0;
}

引用作为返回值

        引用作为返回值,是返回变量本身,而不是一个临时的值,要保证变量的生命周期足够长。

const修饰的引用(常引用)

指针的引用和数组的引用

引用和指针的区别(重点)

        (1)不存在空的引用,引用必须连接到一块合法的内存;指针可以是空指针。
        (2)引用被初始化为一个对象,就不能被指向到另一个对象;
                 指针可以在任何时候指向到另一个对象。
        (3)引用必须在创建时被初始化;指针可以在任何时间被赋值。

动态内存分配

        (1)堆区:自定义生命周期(只申请不释放堆区内存,会内存泄漏)
        (2)栈区:作用域结束,变量才释放
        (3)静态变量:程序结束才释放

动态内存的申请和释放 

        new和delete
        C++中new关键字(运算符)申请的内存空间是有类型的给内存初始化,返回指定类型的指针,并且可以自动计算所需大小。

申请变量

#include <iostream>
using namespace std;
int main()
{int* p = new int; // 指针变量p指向,在堆区申请一个int类型的内存*p = 10;delete p; // 释放new在堆区申请int类型空间p = NULL;return 0;
}

申请数组 

#include <iostream>
using namespace std;
int main()
{int* p = new int[10]; // 在堆区申请一个int类型的10个元素的数组delete[] p; // 释放数组p = NULL;return 0;
}

释放指针置空

        delete释放的是指针指向的内存,指针是一个变量,只有在程序结束时才被销毁。释放了内存空间后,原来指向这块空间的指针还是存在,只不过现在指针指向的内容垃圾区域,所以释放内存后把指针指向NULL,防止指针在后面不小心又被解引用。

new和malloc的区别(重点)

        (1)malloc是库函数;new是关键字(运算符)
        (2)malloc申请的空间没有类型(void *),需要强转;new申请的直接初始化
        (3)new会调用构造函数

函数延伸

重载

        英文叫做overload,C++中允许创建多个名称相同的函数,需要满足:
        (1)在同一作用域内,函数名相同,形参列表不同(类型或者个数不同),返回值不作为决定性条件;
        (2)如果参数列表相同,但返回值不同是不可以重载的。 

函数默认参数

        正常来说函数调用时,形参从实参获取值,但是还可以给形参一个默认值,这样形参就不必从实参取值了(一旦某个形参被赋予了默认值,那么其后面的所有形参都必须有默认值)。

        当函数的声明和定义分开写时,只能在声明的部分写默认参数

#include <iostream>
using namespace std;
void fun(int a = 10, int b = 20, int c = 30);
int main()
{fun();fun(1);return 0;
}
void fun(int a, int b, int c)
{cout << a << b << c <<endl;
}

类的初识

栈区创建对象

#include <iostream>
using namespace std;
class Student
{
public:string name;int age;void set(string n, int a){name = n;age = a;}
};
int main(int argc, char *argv[])
{Student s; //栈区实例化对象//直接对成员变量赋值s.name = "zhangsan";s.age = 18;//调用成员函数间接赋值s.set("lisi",20);return 0;
}

堆区创建对象 

int main(int argc, char *argv[])
{Student *s = new Student() ; //在堆区创建一个Student类型对象//直接对成员变量赋值s->name = "zhangsan";s->age = 18;//调用成员函数间接赋值s->set("lisi",20);delete s;s = NULL;return 0;
}

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

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

相关文章

【天气识别系统】Python+卷积神经网络算法+人工智能+深度学习+TensorFlow+算法模型训练+Django网页界面

一、介绍 天气识别系统&#xff0c;以Python作为主要编程语言&#xff0c;通过收集了4种常见的天气图像数据集&#xff08;多云、雨天、晴天、日出&#xff09;&#xff0c;然后基于TensorFlow搭建卷积神经网络算法模型&#xff0c;通过多轮迭代训练&#xff0c;最后得到一个识…

Go 语言基础教程:6.条件判断

在这篇教程中&#xff0c;我们将通过一个简单的 Go 语言程序来学习条件判断结构的使用。以下是我们要分析的代码&#xff1a; package mainimport "fmt"func main() {if 7%2 0 {fmt.Println("7 is even")} else {fmt.Println("7 is odd")}if 8…

社交媒体与客户服务:新时代的沟通桥梁

在数字化时代&#xff0c;社交媒体已成为人们日常生活中不可或缺的一部分&#xff0c;它不仅改变了人们的沟通方式&#xff0c;也深刻影响着企业的客户服务模式。从传统的电话、邮件到如今的社交媒体平台&#xff0c;客户服务的渠道正在经历一场前所未有的变革。社交媒体以其即…

聚类分析算法——K-means聚类 详解

K-means 聚类是一种常用的基于距离的聚类算法&#xff0c;旨在将数据集划分为 个簇。算法的目标是最小化簇内的点到簇中心的距离总和。下面&#xff0c;我们将从 K-means 的底层原理、算法步骤、数学基础、距离度量方法、参数选择、优缺点 和 源代码实现 等角度进行详细解析。…

Easy Excel合并单元格情况简单导入导出

需求 实现报表数据的导入导出&#xff0c;表格中部分数据是系统生成&#xff0c;部分数据是甲方填写&#xff0c;录入系统。 批号唯一 Maven <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.…

《IDE 巧用法宝:使用技巧全解析与优质插件推荐》

在日常撸代码的时候&#xff0c;相信兄弟们在IDEA 中用到不少插件&#xff0c;利用插件&#xff0c;不仅可以提高工具效率&#xff0c;撸起代码来&#xff0c;也格外的娃哈哈…… 一、IntelliJ IDEA 作为一个资深 Java 程序员&#xff0c;除了 IDEA 中默认的插件&#xff0c;我…

linux入门之必掌握知识点

#1024程序员节&#xff5c;征文# Linux基础 top命令详解 top命令是用来查看进程系统资源使用情况的工具&#xff0c;它可以动态的现实。 top命令执行后&#xff0c;按大写M可以按内存使用情况进行排序&#xff0c;大写P可以按CPU使用情况进行排序&#xff0c;大写H可以显示线…

GNN+A2C 强化学习训练一个粒子避障决策模型

最近想尝试下使用GNN A2C 进行强化学习&#xff0c;GNN 可以充当一个特征提取器&#xff0c;这样可以增加强化学状态空间因为张量长度受限泛化能力不足的缺点&#xff0c;之前做强化学习的时候受限于需要在环境里提取每个对手的特征&#xff0c;在每个不同场景下因为对手的数量…

使用excel.js(layui-excel)进行layui多级表头导出,根据单元格内容设置背景颜色,并将导出函数添加到toolbar

本段是菜狗子的碎碎念&#xff0c;解决办法请直接从第二段开始看。layui多级表头的导出&#xff0c;弄了两天才搞定&#xff0c;中途一度想放弃&#xff0c;还好坚持下来了。一开始用的是layui的toolbar里自带的那个导出&#xff0c;但是多级表头没有正常导出&#xff0c;单元格…

【功能安全】技术安全概念TSC

目录 01 TSC定义 02 TSC注意事项 03 TSC案例 01 TSC定义 所处位置 TSC:Technical safety concept技术安全概念 TSR:Technical safety requirement技术安全需求 在系统开发阶段属于安全活动4-6 系统层产品开发示例 TSC目的

Codeforces Round 981 (Div. 3)

前言&#xff1a; 记录一下自己昨天晚上打的div3吧&#xff0c;感觉自己好久没写博客&#xff0c;以后可能会更新一些其他内容&#xff0c;在这里先买个关子&#xff0c;我要现在今年沉淀几个月&#xff0c;所以这几天可能不会更新博客&#xff0c;今天先出来冒个泡先。 正文&a…

数理统计(第3章:单侧假设检验)

目录 概念&#xff0c;步骤 单个正态母体 两个正态母体 概念&#xff0c;步骤 如果构造统计量是一个未知数&#xff0c;则构造不成统计量&#xff0c;所以拿来构造统计量&#xff0c;用保守估计作为假设&#xff1a;有无显著提高&#xff0c;减小&#xff0c;则假设没有显著…

【在Win11下安装ubuntu +图形化界面】

在win11下安装ubuntu 一、安装流程1. 前期准备&#xff1a;先配置好基础设置2. 安装 ubuntu3. ubuntu进行配置4. 下载图形化界面 并安装 二、遇到的问题问题1. win11安装wsl报错&#xff1a;无法解析服务器的名称或地址1. 方法一&#xff1a;更改DNS&#xff08;对本人无效&…

SpringBoot最佳实践之 - 项目中统一记录正常和异常日志

1. 前言 此篇博客是本人在实际项目开发工作中的一些总结和感悟。是在特定需求背景下&#xff0c;针对项目中统一记录日志(包括正常和错误日志)需求的实现方式之一&#xff0c;并不是普适的记录日志的解决方案。所以阅读本篇博客的朋友&#xff0c;可以参考此篇博客中记录日志的…

【问题解决】三维相关:​Unity Package Manager中没有Newtonsoft Json‌​

问题&#xff1a; 在Unity开发中&#xff0c;用到复杂的json的数据格式&#xff0c;需要将对象和json数据之间相互转换。Unity原生json支持不适用复杂json&#xff08;例如嵌套数组、动态键值对等&#xff09;。大部分人推荐直接在Package Manager中搜索导入(如怎么在unity3D工…

Jupyter Notebook 中使用render_notebook渲染pyecharts图像不显示的一种情况

一开始我发现自己的jupyter文件在渲染pyecharts图片时一开始可以显示&#xff0c;但后来不知道怎么的就不显示了&#xff0c;查找了很多方法&#xff0c;但是没有效果&#xff0c;都是改js渲染什么的&#xff0c;还有就是参数不对的&#xff0c;对于我来说都没什么用&#xff0…

excel中,将时间戳(ms或s)转换成yyyy-MM-dd hh:mm.ss或毫秒格式

问题 在一些输出为时间戳的文本中&#xff0c;按照某种格式显示更便于查看。 如下&#xff0c;第一列为时间戳(s)&#xff0c;第二列是转换后的格式。 解决方案&#xff1a; 在公式输入框中输入&#xff1a;yyyy/mm/dd hh:mm:ss TEXT((A18*3600)/8640070*36519, "yyy…

从传统到智能,从被动监控到主动预警,解锁视频安防平台EasyCVR视频监控智能化升级的关键密钥

视频监控技术从传统监控到智能化升级的过程是一个技术革新和应用场景拓展的过程。智能视频监控系统通过集成AI和机器学习算法&#xff0c;能够实现行为分析、人脸识别和异常事件检测等功能&#xff0c;提升了监控的准确性和响应速度。这些系统不仅用于传统的安全防护&#xff0…

Ribbon客户端负载均衡策略测试及其改进

文章目录 一、目的概述二、验证步骤1、源码下载2、导入IDE3、运行前修改配置4、策略说明5、修改策略 三、最终结论四、改进措施1. 思路分析2. 核心代码3. 测试页面 一、目的概述 为了验证Ribbon客户端负载均衡策略在负载节点失效的情况下&#xff0c;是否具有故障转移的功能&a…

一家生物技术企业终止,科创属性可能不足,报告期内专利数猛增

轩凯生物九成以上营业收入来源于植物营养领域&#xff0c;收入来源结构单一&#xff0c;产品下游应用领域较为集中。报告期内公司应收账款账面价值逐年上升&#xff0c;回款比例显著低于前两年&#xff0c;遭交易所问询是否存在较大的坏账风险。 轩凯生物核心技术是否成熟以及是…