C++入门到进阶(图文详解,持续更新中)

C++入门到进阶(图文详解,持续更新中)

目录

C++入门到进阶(图文详解,持续更新中)

数据

数据类型

基本数据类型/内置数据类型

C++常用运算符

赋值运算符

关系运算符

逻辑运算符

杂项运算符

数据的本地化存储

一、准备工作:

二、写流即向本地文件中写入数据该如何实现?

1.创建写流的对象或创建写流的变量

2.打开文件执行,准备执行写数据(称为开流)

3.对本地写数据

4.关闭流

三、读流(即从本地文件中读取数据)

1.创建读流对象

2.打开文件准备读取数据(称为开流)

3.开始从本地读取数据

4.关闭流

函数

函数的声明和定义

​编辑

函数传值

传出数据(即返回值)

传入数据(即传参)

1.什么是传参?

2.作用

3.类型

4.关于形参在函数声明和函数定义中注意点

5.默参

6.函数重载

7.传参方式

面向对象


数据

数据类型

基本数据类型/内置数据类型

整型:有符号与无符号

int

unsignedf int

long

unsigned long int

short int

ushort

byte

sbyte

long int

unsigned long int

浮点型/实型:

float

double

long double

字符型:

char

布尔型:

bool

C++常用运算符

赋值运算符

基本赋值运算符:=

复合赋值运算符:+=(加赋值)、-=(减赋值)、*=(乘赋值)、/=(除赋值)、%=(求余赋值)、 <<=(左移赋值)、>>=(右移赋值)、&=(按位与赋值)、|=(按位或赋值)、*A=(按位异或赋值)

关系运算符

== != < > <= >=

逻辑运算符

&& || !

杂项运算符

sizeof和三目运算符

数据的本地化存储

一、准备工作:

实现本地化存储需要

头文件为:iostream,ofstream

引入头文件

#include<iostream>

#include<ofstream>

命名空间为:std

引入命名空间:

using namespace std;

二、写流即向本地文件中写入数据该如何实现?

使用ofstream的方法,操作步骤为:

1.创建写流的对象或创建写流的变量

ofstream ofs;

2.打开文件执行,准备执行写数据(称为开流)

ofs.open("abc.txt", ios::out);

3.对本地写数据

string name;

getline(cin, name,'q');

ofs << name << endl;

4.关闭流

ofs.close();

三、读流(即从本地文件中读取数据)
1.创建读流对象

 ifstream ifs;

2.打开文件准备读取数据(称为开流)

ifs.open("abc.txt", ios::in);

3.开始从本地读取数据

方法1:
 char ValueArrays[1024]{};

 while (ifs >> ValueArrays)//非零即为真
    {
        cout << ValueArrays << endl;//这是字符串的打印
    }

方法2:

string str = " ";
    while (ifs >> str)
    {
        cout << str << endl;
    }

4.关闭流

 ifs.close();

存储案例展示:(存储数据到UserInfo的txt文本中,读取数据,新增数据,查找相关姓名、年龄、地址)

#include <iostream>
#include<fstream>  
#include<string>
#include"User.h"
/*
预处理
#include中的" "和<>的使用
<>:代表的导入C++库文件
“ ”:先检索是否有没有自己写的头文件,如果检索不到自己写的头文件,会自动查找C++库,找不到就报错
*/using namespace std;
void Save()
{using namespace std;ofstream ofs;ofs.open("abc.txt", ios::out);string name;getline(cin, name,'q');ofs << name << endl;ofs.close();}
int name_index = 0;
void Add(string nameArrays[])//name是一个形参,需要一个string 类型数组的地址
{string name = " ";cin >> name;nameArrays[name_index] = name;name_index++;ofstream ofs;ofs.open("abc.txt", ios::out);for (int i = 0; i < name_index; i++){ofs << nameArrays[i] << endl;}ofs.close();
}void GetValue()
{using namespace std;//1. 创建对象ifstream ifs;//2. 开流ifs.open("abc.txt", ios::in);//3.读取数据,方法1//3.1数据本地读取出来了,需要找到一个容器去存放读取出来的数据char ValueArrays[1024]{};//3.2开始取出数据,并将本地数据在数据中while (ifs >> ValueArrays)//非零即为真{cout << ValueArrays << endl;//这是字符串的打印}ifs.close();cout << "---------" << endl;//3.读取数据,方法2//3.1数据本地读取出来了,需要找到一个容器去存放读取出来的数据//读取不走回头路ifs.open("abc.txt", ios::in);string str = " ";while (ifs >> str){cout << str << endl;}ifs.close();cout << "--------" << endl;//3.读取数据,方法3 借助一个ifstream里的一个函数getlineifs.open("abc.txt", ios::in);char buf[1024]{};while (ifs.getline(buf, sizeof(buf)))//getline是ifstream下的一个函数,用于获取到一行数据,函数的第一个参数是用于接收一行数据的字符数组,//第二个参数是用于接收数据的容器的大小{cout << buf << endl;}ifs.close();cout << "--------" << endl;//3.读取数据,方法4 借助一个string里的一个函数getlineifs.open("abc.txt", ios::in);string str_buf = {};while (getline(ifs, str_buf)){cout << str_buf << endl;}ifs.close();cout << "--------" << endl;//3.读取数据,方法5 借助一个ifstream里的一个函数eofifs.open("abc.txt", ios::in);char eof_buf[1024]{};while (!ifs.eof()){ifs >> eof_buf;cout << eof_buf << endl;}ifs.close();
}void SetValue()
{string name = " ";string age = " ";string address = " ";cout << "请输入姓名:" << endl;cin >> name;cout << "请输入年龄:" << endl;cin >> age;cout << "请输入地址:" << endl;cin >> address;ofstream ofs;ofs.open("Value.txt", ios::out);ofs << name << "  ";ofs << age << "  ";ofs << address << endl;ofs.close();
}void SelValue()
{string r_name = " ";string r_age = " ";string r_address = " ";ifstream ifs;ifs.open("Value.txt", ios::in);while (ifs >> r_name && ifs >> r_age && ifs >> r_address){cout << "姓名:" << r_name << ",年龄:" << r_age << ",地址:" << r_address << endl;}ifs.close();
}//增加用户
User uArray[6] = {};
int uSize = 0;
void AddUser()
{string name;int age;string address;cout << "输入姓名:" << endl;cin >> name;cout << "输入年龄:" << endl;cin >> age;cout << "输入地址:" << endl;cin >> address;User uInstance;uInstance.name = name;uInstance.age = age;uInstance.address = address;uArray[uSize] = uInstance;uSize++;ofstream ofs;ofs.open("UserInfo.txt", ios::out);for (int i = 0; i < uSize; i++){ofs << uArray[i].name << " ";ofs << uArray[i].age << " ";ofs << uArray[i].address << endl;}ofs.close();
}int Find(string name)
{for (int i = 0; i < uSize; i++){if (uArray[i].name == name){return i;}}return -1;
}//查询所有人的所有信息
void SelAllUser()
{ifstream ifs;ifs.open("UserInfo.txt", ios::in);//is_open判断上一行代码中打开的文件是否存在//存在返回真,不存在返回假/*if (ifs.is_open()){cout << "文件存在" << endl;}elsecout << "文件不存在" << endl;*/if (!ifs.is_open()){cout << "文件不存在" << endl;return;//文件不存在,下方逻辑不用执行}char buf[1024];ifs >> buf;if (ifs.eof()){cout << "文件存在,但没数据" << endl;return;//下方逻辑无需进行}ifs.close();ifs.open("UserInfo.txt", ios::in);int i = 1;string name;int age;string address;while (ifs >> name && ifs >> age && ifs >> address){cout << "第" << i << "人的姓名是" << name << ",年龄是" << age << ",地址是" << address << endl;}}
//查询某个人的所有信息
void SelUser()
{cout << "输入名字" << endl;string sel_name = " ";cin >> sel_name;int index = Find(sel_name);//Find()会返回一个int类型的值if (index != -1) {}//ifstream ifs;ifs.open("UserInfo.txt", ios::in);string name = " ";int age = 0;string address = " ";while (ifs >> name && ifs >> age && ifs >> address){if (name == sel_name){cout << "用户名为:" << name << ",年龄是:" << age << ",地址是:" << address << endl;}}
}
//初始化
int Init()
{ifstream ifs;ifs.open("UserInfo.txt", ios::in);if (!ifs.is_open()){cout << "文件不存在" << endl;return -1;//文件不存在,下方逻辑不用执行}char buf[1024];ifs >> buf;if (ifs.eof()){cout << "文件存在,但没数据" << endl;return -1;//下方逻辑无需进行}ifs.close();ifs.open("UserInfo.txt", ios::in);int i = 0;string name;int age;string address;while (ifs >> name && ifs >> age && ifs >> address){uArray[i].name = name;uArray[i].age = age;uArray[i].address = address;i++;}return i;
}
int main()
{   //string str = {};//getline(cin, str, 'q');//控制台输入数据,赋值到str中,按q键再按回车键结束//getline(cin, str, '\t');//控制台输入数据,赋值到str中,按Tab键然后再按回车结束//cout << str << endl;//Save();//GetValue();//SetValue();// SelValue();int addIndex = Init();while (true) {cout << "添加:1,查询:2,退出:0" << endl;int selecter;cin >> selecter;switch (selecter){case 0:exit;break;case 1:AddUser();break;case 2:SelAllUser();break;}}system("pause");
}

函数

函数的声明和定义

函数声明的作用:代表的是函数的出生位置(占位置的),如果在文件最上方的位置声明了函数,不用担心函数和函数之间互相调用编译不通过的问题

函数的定义:为函数声明写函数体(写逻辑)

注 :可能出现的bug,函数只有声明,没有定义,这个函数却被调用了,被编译时期的异常error

函数传值

传出数据(即返回值)

作用:在函数内传数据出函数

样式

返回类型 函数名称(参数)

{

        return 对应返回类型的值;

        //此处的return有双重作用:

        1.跳转语句(跳出函数)

        2.返回值

}

可以返回的值:

1.对应返回类型的值

2.对应返回类型的变量

3.带同种返回类型返回值的函数调用——先执行函数调用,再返回值

传入数据(即传参)
1.什么是传参?

传参就是实参传入形参

2.作用

在函数外部传入数据到函数内部

3.类型

形参:在函数声明和定义的时候写的是行参

实参:在函数调用的时候 传递的值是实参

实参的种类:

(1)对应形参类型的值

(2)对应形参类型的变量

(3)带同种返回类型返回值的函数调用,即先执行函数调用,再传参数(实参传参数)

4.关于形参在函数声明和函数定义中注意点

(1)声明的形参参数名称和定义的形参参数名称

(2)可以不一样声明的时候可以省略参数名称

(3)如果存在函数的默参,默认是必须写在函数声明位置的,不可以在声明和定义中都写一遍默参

5.默参

作用:函数可以在声明或者定义的时候给出默认的逻辑执行

  • 关于默参的放置位置说明

    • 如果只有一个默参

      • 放在参数结尾处(最右侧)

    • 如果有多个默参

      • 从右到左依次给出默参,中间不可以隔开使用

        • 错误演示:void Function(int i=10,int a,bool b=false)

        • 正确演示::void Function(int i=10,int a=10,bool b=false)

6.函数重载
  • 函数名相同,但是函数参数(参数类型)不同,通过传入不同的实参,调用不同的函数,执行不同的功能

  • 注意:

    • 函数返回值不参与函数重载的过程

    • 如果被重载的函数中出现了默参

      • 建议不要写成重载函数

      • 如果不接受建议,就需要保证默参的几个参数类型与其他被重载的函数的参数不一致

7.传参方式

(1)值传递:值传递只能影响本函数,值的修改不会影响其他的功能,也不会影响到实参

(2)地址传递

(3)引用传递

面向对象

待更新.....

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

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

相关文章

第二课:使用域名dns ping通www.baidu.com

需要一台dns服务器&#xff0c;实现域名解析&#xff0c;把对应的网址变为Ip地址。 首先按照之前博客的配置&#xff0c;自动分配给PC1和PC2的IP地址等相关配置。 然后增加一台server交换机连接到交换机上&#xff0c;配置好ip地址&#xff0c;192.168.1.100。在dnsServer中。…

7.11日学习打卡----初学Redis(六)

7.11日学习打卡 目录&#xff1a; 7.11日学习打卡一. redis事务事务的概念与ACID特性Redis事务三大特性Redis事务执行的三个阶段Redis事务基本操作 二. redis集群主从复制主从复制环境搭建主从复制原理剖析 哨兵监控哨兵监控环境搭建哨兵工作原理剖析 故障转移Cluster模式Clust…

c++初阶知识——类和对象(1)

目录 1.类和对象 1.1 类的定义 1.2 访问限定符 1.3 类域 2.实例化 2.1 实例化概念 2.2 对象大小 内存对齐规则 3.this指针 1.类和对象 1.1 类的定义 &#xff08;1&#xff09;class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xf…

达梦数据库中的线程和进程

达梦数据库中的线程和进程 在达梦数据库中&#xff0c;线程和进程的概念与操作系统中的定义类似&#xff0c;但有一些特定的实现细节和用途。以下是达梦数据库中线程和进程的一些关键点&#xff1a; 进程&#xff08;Process&#xff09;&#xff1a; 在达梦数据库中&#x…

django的增删改查,排序,分组等常用的ORM操作

Django 的 ORM&#xff08;对象关系映射&#xff09;提供了一种方便的方式来与数据库进行交互。 1. Django模型 在 myapp/models.py 中定义一个示例模型&#xff1a;python from django.db import modelsclass Person(models.Model):name models.CharField(max_length100)age…

mysql数据库被偷家,数据全部丢失。还勒索我给他比特币

歹徒留下的勒索信息。 解决办法&#xff1a; 1、设置ip白名单&#xff0c; 2、端口不要使用默认端口&#xff0c;随便换个端口就行。 3、密码设置复杂一点。

【Java16】多态

向上类型转换 对于引用变量&#xff0c;在程序中有两种形态&#xff1a;一种是编译时类型&#xff0c;这种引用变量的类型在声明它的时候就决定了&#xff1b;另一种则是运行时类型&#xff0c;这种变量的类型由实际赋给它的对象决定。 当一个引用变量的编译时类型和运行时类…

【Pytorch】Conda环境pack打包迁移报错处理

文章目录 Anaconda虚拟环境打包一、源电脑的环境打包1.安装conda-pack工具2.确定环境3.打包环境4.将打包环境拷贝到U盘 二、环境迁移到目标电脑上三、异常处理pip install -e. 导致无法pack→忽略管理的文件已经被删除或者被覆盖→压缩成tar注意 重新激活环境 Anaconda虚拟环境…

14 - matlab m_map地学绘图工具基础函数 - 一些数据转换函数(一)

14 - matlab m_map地学绘图工具基础函数 - 一些数据转换函数&#xff08;一&#xff09; 0. 引言1. 关于m_ll2xy和m_xy2ll2. 关于m_lldist3. 关于m_xydist4 关于m_fdist5 关于m_idist6. 总结 0. 引言 通过前面篇节已经将m_map绘图工具中大多绘图有关的函数进行过介绍&#xff0…

Nuxt3封装网络请求 useFetch $fetch

前言&#xff1a; 刚接触、搭建Nuxt3项目的过程还是有点懵的&#xff0c;有种摸石头过河的感觉&#xff0c;对于网络请求这块&#xff0c;与之前的Vue3项目有所区别&#xff0c;在Vue项目通常使用axios这个库进行网络请求&#xff0c;但在Nuxt项目并不推荐&#xff0c;因为有内…

RK3568平台(显示篇)主屏副屏配置

一.主屏副屏配置 目前在RK3568平台上有两路HDMIOUT输出&#xff0c;分别输出到两个屏幕上&#xff0c;一路配置为主屏&#xff0c;一路配置为副屏。 硬件原理图&#xff1a; &hdmi0_in_vp2 {status "okay"; };&hdmi1_in_vp0 {status "okay"; }…

【JAVA入门】Day15 - 接口

【JAVA入门】Day15 - 接口 文章目录 【JAVA入门】Day15 - 接口一、接口是对“行为”的抽象二、接口的定义和使用三、接口中成员的特点四、接口和类之间的关系五、接口中新增的方法5.1 JDK8开始接口中新增的方法5.1.1 接口中的默认方法5.1.2 接口中的静态方法 5.2 JDK9 开始接口…

Pandas实战指南:any()函数深度解析与高效应用

Pandas实战指南&#xff1a;any()函数深度解析与高效应用 引言 在数据分析和处理过程中&#xff0c;经常需要快速检查数据集中是否存在满足特定条件的元素。Pandas库中的any()函数正是这样一个强大的工具&#xff0c;它可以帮助我们沿着指定的轴检查是否至少有一个元素满足某…

Transformer重要论文与书籍 - Transformer教程

近年来&#xff0c;人工智能领域中的Transformer模型无疑成为了炙手可热的研究对象。从自然语言处理&#xff08;NLP&#xff09;到计算机视觉&#xff0c;Transformer展现出了前所未有的强大能力。今天&#xff0c;我们将探讨Tra在当今的人工智能和机器学习领域&#xff0c;Tr…

路由守卫中使用next()跳转到指定路径时会无限循环

路由守卫钩子介绍 const router new VueRouter({ ... }) // 导航路由变化时触发路由守卫钩子 router.beforeEach((to, from, next) > {// ... }) to: Route: 即将要进入的目标路由对象(到哪去)from: Route: 当前导航正要离开的路由(从哪来)next: Function(必须&#xff0…

axios使用sm2加密数据后请求参数多了双引号解决方法

axios使用sm2加密数据后请求参数多了双引号解决 背景问题描述解决过程 背景 因项目安全要求&#xff0c;需对传给后端的入参加密&#xff0c;将请求参数加密后再传给后端 前期将axios降低到1.6.7后解决了问题&#xff0c;但最近axios有漏洞&#xff0c;安全要求对版本升级&…

从零开始[进阶版]深入学习图像分类:使用Python和TensorFlow

引言 图像分类是计算机视觉中的一个核心任务&#xff0c;广泛应用于人脸识别、自动驾驶、医疗影像分析等领域。在本篇文章中&#xff0c;我们将深入探讨图像分类的原理和实现&#xff0c;使用Python和TensorFlow搭建一个完整的图像分类系统。本文不仅适合初学者&#xff0c;也…

【Qt 初识 Test】用图形化和代码的方式实现简单的Qt程序

文章目录 1. 通过图形化的方式实现&#x1f34e;2. 通过代码的方式实现 1. 通过图形化的方式实现&#x1f34e; 在界面创建出一个控件&#xff0c;显示 hello world&#xff0c;通过拖拽的方式实现&#xff1b; widget.ui文件如下&#xff1a;&#x1f50d; 生成的 ui_widget.…

生物环保技术有哪些缺点或者局限性呢

生物环保技术&#xff0c;作为一种利用生物学原理和技术来处理环境污染的方法&#xff0c;虽然具有绿色环保、高效节能等优点&#xff0c;但也存在一些缺点和局限性。以下是对这些缺点和局限性的详细分析&#xff1a; 一、受环境因素影响大 生物环保技术的效果往往受到环境因…

数据结构第18节 散列表 - 应用

散列表&#xff08;Hash Table&#xff09;&#xff0c;也被称为哈希表&#xff0c;是一种数据结构&#xff0c;它通过使用哈希函数将键映射到数组的某个位置来实现快速查找。散列表通常提供平均时间复杂度为O(1)的查找、插入和删除操作&#xff0c;这使得它们在处理大量数据时…