Linux 学习记录40(C++篇)

news2025/1/13 8:52:41

Linux 学习记录40(C++/QT篇)

在这里插入图片描述

本文目录

  • Linux 学习记录40(C++/QT篇)
  • 一、QT软件的使用
    • 1. 新建工程
  • 二、C语言和C++的区别
    • 1. C++对C的扩充
    • 2. C++对C的兼容
  • 三、第一个C++程序
    • 1. cout标准输出流对象
      • (1.介绍:
      • (2. 运算符
      • (3. cout的使用
    • 2. cin标准输出流对象
      • (1.介绍:
      • (3. cin的使用
  • 四、命名空间
    • 1. 介绍
    • 2. 定义命名空间
    • 3. 命名空间冲突问题
      • (1. 指明引入的空间名
      • (2. 不同时将两个空间都全局引入
      • (3. 局部变量和命名空间冲突问题
      • (4. 全局变量和命名空间冲突问题
    • 4. 命名空间的嵌套
      • (1. 命名空间的添加
      • (2. 命名空间的嵌套
      • (3. 命名空间重命名
    • 5. using的用法
  • 五、字符串/C++中的string类
    • 1. 定义一个字符串类型
    • 2. C++字符串转换为C字符串
      • (1. c_str函数
      • (2. data函数
    • 3. string常用函数
      • (1. at 函数
      • (2. empty 函数
      • (3. length 函数
      • (4. clear 函数
    • 4. 字符串能够直接比较
    • 5. 字符串输入
      • (1. getline 函数
  • 六、C++中的布尔类型
  • 思维导图
  • 练习
    • 1. 字符串逆置

一、QT软件的使用

1. 安装路径要为全英文路径
2. 创建文件时也要求全英文路径

1. 新建工程

1.在这里插入图片描述
2. 新建非QT的文件
在这里插入图片描述
3. 选择创建的路径
在这里插入图片描述
4. 选择编译套件(后面一直下一步即可)
在这里插入图片描述
5. 修改文件编码
在这里插入图片描述
在这里插入图片描述

二、C语言和C++的区别

C++也叫C plus plus,对C语言进行了语法的扩充,支持大部分C语言语法。
C++是编译型语言
C语言是面向过程的语言,C++是面向对象的语言
面向过程的语言:自己写代码完成求解的过程
面向对象的语言:求解的方法。

面向对象的语言:求解的方法。

1. C++对C的扩充

1. 命名空间(用于解决命名冲突问题)
2. 函数重载和运算符重载(字符串的比较)
3. 引用(与指针相似)
4. 面向对象的特征
5. 泛式编程
6. 模板编程
7. STL标准模板库

2. C++对C的兼容

  1. C++几乎支持所有的C语言语法,g++是编译C++文件时用到的编译器,C++编译器要不C语言编译器更加严格
  2. C中的头文件<stdio.h>在C++中仍然支持C语言的头文件,一般去掉h在头文件名前面加上c,<stdio.h>-.>cstdio>
  3. C文件一般.c结尾,C++文件一般是.cpp结尾
  4. g++仍然能编译C程序,但是qcc不能编译c++程序

三、第一个C++程序

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    int i = 90;
    cout << i << endl;   //90
    double num = 9.123456789;
    cout <<num << endl; //默认输出6位,小数点也算一位
    //setbase()输出,指定的进制
    cout << setbase(8) << i << endl;   //132   输出了i的8进制
    cout << setbase(16) << i << endl;  //5a    输出i的16进制
    cout << i << endl;    //5a,因为前一句对cout的输出格式做了修改,并且没有更改回来
    cout << setbase(10) << i << endl;  //90
    //使用关键字输出指定进制
    cout << oct << i << endl;    //八进制输出
    cout << hex << i << endl;    //十六进制
    cout << dec << i << endl;    //十进制输出

    //指定宽度的输出
    //printf("%nd");   右对齐n个宽度
    cout << setw(5) << i << endl;    //指定宽度的输出,默认是右对齐输出
    cout << setw(5) << left << i << endl;   //指定宽度的输出,左对齐输出

    //对num指定宽度的输出
    cout << setprecision(8) << num << endl;   //指定小数点后的输出位数
    return 0;
}

输出结果:
在这里插入图片描述

1. cout标准输出流对象

(1.介绍:

1. cout是由ostream提供的C++中的标准输出流类
2. cout还包含在std中,cout就是一个类对象

(2. 运算符

  1. <<和>>在C++中被定义为左移右移运算符,但是 iostrean中对<<和>>进行了重载重载后,<<输出,>>输入

(3. cout的使用

如果需要用到函数就必须引用头文件,不然编译会不通过

1. 不需要使用%d,%c,%f等占位符
2. 可以级联输出

2. cin标准输出流对象

(1.介绍:

istream类中提供的输入流对象
1. 不需要加格式符
2. 不能加endl
int main()
{
    int in_data = 0;

    cin >> in_data ;//
    cout << in_data <<endl;

    return 0;
}

(3. cin的使用

1. cin会根据变量的类型决定获取数据
2. 如果有遗留的数据会按类型提供给下一个要输入的数据

四、命名空间

1. 介绍

命名空间的作用: 为了解决命名污染问题(命名冲突问题)

  1. 查看std: 按住ctrl点击std
    在这里插入图片描述
#include <iostream>
#include <iomanip>
using namespace std; //用于全局导入命名空间内的所有标识符
using std::cout; //用于全局导入命名空间内的部分标识符
:: //双冒号是域标识符
命名空间名::该空间内的名//标识调用该命名空间内的名,直接引用该命名空间内的名

2. 定义命名空间

命名空间可以有变量名,函数名,结构体名...等等
格式·:

namespace 命名空间名
{
}

例:

#include <iostream>
#include <iomanip>
using namespace std;

namespace A
{
    int a;
    int b;
    double c;
    int add(int num1,int num2);
}

//定义函数并将函数名定义到A命名空间内
int A:: add(int num1,int num2)
{
    return num1+num2;
}

using namespace A;
int main()
{
    a = 25;
    cout << a << endl;

    return 0;
}

3. 命名空间冲突问题

当多个命名空间中,标识符冲突时,会报错

(1. 指明引入的空间名

#include <iostream>
//using namespace std;   //全局导入命名空间中的标识符
using std::cout;  //全局导入std中的cout
using std::endl;  //全局导入std中的endl
//定义了一个命名空间A
namespace A
{
     int a;
     int b;
     double num;
     void show();
}
namespace B {
     int a;
}
void A::show()
{
    std::cout << "hello" << endl;
}
using namespace A;
using namespace B;
int main()
{
    //using namespace std;    //在mian内局部引入std中的所有标识符
    cout << A::a << endl;     //指明使用A中的a
    B::a=100;
    cout << B::a << endl;
    show();
    cout << "Hello World!" << endl;
    return 0;
}

(2. 不同时将两个空间都全局引入

#include <iostream>
//using namespace std;   //全局导入命名空间中的标识符
using std::cout;  //全局导入std中的cout
using std::endl;  //全局导入std中的endl
//定义了一个命名空间A
namespace A
{
     int a;
     int b;
     double num;
     void show();
}
namespace B {
     int a;
}
void A::show()
{
    std::cout << "hello" << endl;
}
using namespace A;
int main()
{
    //using namespace std;    //在mian内局部引入std中的所有标识符
    cout << a << endl;     //使用A中的a,因为只引入了A命名空间
    a=100;
    cout << a << endl;
    show();
    cout << "Hello World!" << endl;
    return 0;
}

(3. 局部变量和命名空间冲突问题

默认使用局部变量,局部有限
如果想要使用命名空间中的标识符,需要加上,命名空间名和域限定符

#include <iostream>
using namespace std;
namespace N1 {
     int age=79;
}
using namespace N1;
int main()
{
    int age = 100;
    cout << age << endl;   //100,局部优先
    cout << N1::age << endl;   //79,知名访问N1中的age
    return 0;
}

(4. 全局变量和命名空间冲突问题

匿名空间:没有名字的命名空间,直接用::使用匿名空间中的值

1. 如果全局变量和普通的命名空间重提,直接在变量名前加上域限定符::,就可以访问全局变量
2. 如果全局变量和匿名空间冲突,使用域限定符只能访问到全局变量的值,匿名空间中的值被覆盖
pace N1 {
     int age=79;
}
//定义了一个匿名空间
namespace  {
     int age = 100;
     int fat = 100;
}
using namespace N1;
int main()
{
    cout << N1::age << endl;   //访问命名空间中的age
    cout << ::age << endl;     //通过域限定符访问全局变量age,全局变量默认存储在匿名空间中
    cout << ::fat << endl;     //::通过域限定符访问匿名空间中的标识符
    return 0;
}

4. 命名空间的嵌套

(1. 命名空间的添加

如果定义了多个命名空间,最后会合并为一个

namespace N1
{
    int a;
}

namespace N1
{
    int b;
}
什么两个命名空间会合并为一个命名空间
==============

(2. 命名空间的嵌套

#include <iostream>
#include <iomanip>
using namespace std;

namespace N1
{
    int age=1;
    //N1内嵌套了一个N2命名空间
    namespace N2 
    {
        int age=2;
        int fat=3;
    }
}
using namespace N1;
int main()
{
	//访问N1内嵌套N2的数据
    cout << N1::N2::age << endl;
    return 0;
}

(3. 命名空间重命名

重命名:namespace 新名 = 旧名 ,旧名依然可以使用

namespace N1
{
    int age=1;
}
using namespace N1;
int main()
{
    namespace p = N1;//将N1重命名为P,同时N1还可以继续使用
    return 0;
}

5. using的用法

需要导入的类:#include <cstring>
可以用于类型的重定义,是C++11的新特性,不完全通用

using 新名 = 旧名;

五、字符串/C++中的string类

C语言中是不支持字符串类型的

在这里插入图片描述

1. 定义一个字符串类型

通过string类来定义一个字符串类型

#include <iomanip>
#include <cstring>

using namespace std;

int main()
{
    char str[30] = "word";
    string str1 ="hello";
    string str2 =str1;//能够直接使用已有字符串赋值
    string str3 (5,'a');//赋值5个a
    string str4 ("he");//赋值he
    cout << str2 << endl;
    cout << str3 << endl;
    cout << str4 << endl;
    str1 += str;//能够直接拼接赋值
    cout << str1 << endl;

    return 0;
}

运行结果:
在这里插入图片描述

2. C++字符串转换为C字符串

C字符串能够直接被C++字符串直接使用
C++字符串需要转换成C字符串才能被C使用

(1. c_str函数

功能:将C++字符串转换为C字符串
返回值为一个指针
#include <iostream>
#include <iomanip>
#include <cstring>

using namespace std;

int main()
{
    string str1 ="hello";
    char str2[30] = "world";

    printf("%s",str1.c_str());

    return 0;
}

(2. data函数

功能:将C++字符串转换为C字符串
返回值为一个指针
#include <iostream>
#include <iomanip>
#include <cstring>

using namespace std;

int main()
{
    string str1 ="hello";
    char str2[30] = "world";

    printf("%s",str1.data());

    return 0;
}

3. string常用函数

(1. at 函数

功能:通过下标访问字符串中的具体字符,当越界时会抛出异常,报警告
int main()
{
    string str1 ="hello";

    cout << str1.at(3) << endl;

    return 0;
}

报错:
在这里插入图片描述

(2. empty 函数

功能:判断字符串是否为空
int main()
{
    string str1 ="hello";

    if (str1.empty())
    {
        cout << "NULL" <<endl;
    }else
    {
        cout << "Not NULL" <<endl;
    }

    return 0;
}

(3. length 函数

功能:计算字符串长度
int main()
{
    string str1 ="hello";
    cout << str1.length() << endl;
    return 0;
}

(4. clear 函数

功能:清空字符串
int main()
{
    string str1 ="hello";
    str1.clear()
    return 0;
}

4. 字符串能够直接比较

C++中字符串能够直接比较,类似C中strcmp功能


5. 字符串输入

无法直接获取带空格的字符串

例:
int main()
{
    string str1;

    cin >> str1;

    cout << str1 << endl;

    return 0;
}

结果
在这里插入图片描述

(1. getline 函数

功能:能够获取带空格的字符串
第一个参数为输入流,第二个为字符串
例:
int main()
{
    string str1;

    getline(cin,str1);

    cout << str1 << endl;

    return 0;
}

结果
在这里插入图片描述

六、C++中的布尔类型

1. 在C语言在是不支持布尔类型的,需要导入头文件<bool.h>
2. C++中支持布尔类型
3. true和false,是bool类型的值,并且true和false是关键字
4. bool类型在C++中默认是数字表示的,如果需要以字符串形式打印需要加关键字boolalpha关键字

int main()
{
    bool a =true;//定义布尔类型的变量
    bool b =false;

    cout << a <<endl;//以默认形式打印
    cout << b <<endl;

    cout << boolalpha << a <<endl;//以字符串形式打印
    cout << b <<endl;

    cout << noboolalpha << a <<endl;//取消上一个形式

    return 0;
}

输出
在这里插入图片描述

思维导图

在这里插入图片描述

练习

1. 字符串逆置

定义一个命名空间Myspace,包含以下函数:将一个字符串中的所有单词进行反转,并输出反转后的结果。例如,输入字符串
为”Hello World”,输出结果为"olleH dlrow”,并在主函数内测试该函数。

#include <iostream>
#include <iomanip>
#include <cstring>
#include <cstdio>

using namespace std;

namespace Mysqace
{
    string str_Inversion(string str);
    string world(string str);
}


string Mysqace::world(string str)
{
    int i = 0;
    int len = 0;
    char ret[128] = {0};
    len = str.length();

    //单个字符串逆置
    for (i=0; i < len ; i++)
    {
        ret[i] = str.at(len-1-i);
    }
    return ret;
}

string Mysqace::str_Inversion(string str)
{
    string ret;
    char buf[128];
    char buf2[128] = {0};
    strcpy(buf,str.c_str());
    char* p1=buf;
    char* p2=buf;
    int i=0;

    while(1)
    {
        p1=strstr(p1," ");
        p1+=1;
        //获取单个字符串
        i=0;
        while(1)
        {
            if(*(p2+i)==0x20 || *(p2+i)==0)
            {
                break;
            }

            buf2[i]=*(p2+i);
            printf("%c \r\n",*(p2+i));
            i++;
        }
        buf2[i]=' ';
        buf2[i+1]='\0';
        printf("接收到:%s \r\n",buf2);
        ret+=Mysqace::world(buf2);
        printf("逆置为:%s \r\n",ret.c_str());
        if(ret.length()==str.length())return ret;
        p2=p1;
        if(p1 == NULL) return ret;
    }

    return ret;
}

int main()
{
    string str;

    getline(cin, str); //获取字符串

    cout << "获取到的字符串:" << str << endl;

       Mysqace::str_Inversion(str);
//    cout << "逆置后的字符串:" << Mysqace::str_Inversion(str) << endl;
       cout << "结束" << endl;

    return 0;
}

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

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

相关文章

python【爬虫】【批量下载】年报抓取

python年报爬取更新 本人测试发现&#xff0c;ju chao网的年报爬取距离我上一篇博客并没有啥变化&#xff0c;逻辑没变&#xff0c;应好多朋友的需要&#xff0c;这里补充代码 import json import osimport requestsweb_url 改成网站的域名&#xff0c;因为csdn屏蔽 def load…

深入了解cookie以及实际项目中的应用

目录 cookie的原理 cookie是不可跨域的 cookie 的属性 Cookie与Session的区别 在git中的应用 cookie的原理 什么是cookie呢&#xff1f; 众所周知&#xff1a;http都是无状态的 但随着 Web 的不断发展&#xff0c;这种 无状态 的特性出现了弊端。当你登录到一家购物网站…

RabbitMQ保证消息的可靠投递,Java实现RabbitMQ消息的可靠投递,Springboot实现RabbitMQ消息的可靠投递

文章目录 一、RabbitMQ消息可靠性概述1、引出问题2、RabbitMQ消息可靠性保证的四个环节 二、保证生产者消息发送到RabbitMQ服务器1、服务端确认&#xff1a;Transaction模式&#xff08;1&#xff09;JavaAPI&#xff08;2&#xff09;springbootAPI 2、服务端确认&#xff1a;…

【Matlab】根据伯德图计算pid参数方法原理

在学习鲁棒控制的过程中&#xff0c;有一些步骤需要根据一些性能参数来计算pid参数&#xff0c;因此记录一下根据伯德图的性能来计算pid参数的原理。 系统开环响应的几个关键参数 在使用开环响应初调控制器参数时&#xff0c;主要就是调整几个需要注意的关键参数&#xff0c;…

nbcio-vue中formdesigner的组件显示不正常的处理

今天看演示系统的formdesigner组件显示不正常&#xff0c;也不知道是什么时候开始的事情&#xff0c; 如下&#xff1a; 对组件的操作倒是正常&#xff0c;但看本地是正常的&#xff0c;如下&#xff1a; 开始也不知道是什么原因&#xff0c;看代码也是一样的&#xff0c;应该…

11 MFC 制作记事本

文章目录 界面制作制作菜单设置编译框随着窗口的变化而变化OnSize打开文件文件另存为设置字体颜色修改字体文件的查找与替换查找与替换对话框显示&#xff08;非模态对话框&#xff09;对话框消息与对话框处理函数 全部代码 界面制作 制作菜单 选择Menu 点击新建 将内容写入&qu…

Nightingle夜莺Docker版SNMP监控

起因 对夜莺很感兴趣&#xff0c;想使用一下。我看官方提供了v6版本的docker-compose。而且我之前有使用过promtheus和grafana&#xff0c;虽然很好但是总觉得还是得二开。总有一天有人去搞一个不错的玩意儿出来。官方文档地址 安装与配置 直接运行docker版本的demo&#xf…

mysql内部结构和InnoDB底层原理

一、mysql内部结构 mysql总体上分为客户端、Server层、引擎层&#xff0c;具体如下图&#xff1a; 1、连接器 一般客户端通过jdbc、navicat等工具发送请求连接到mysql服务端&#xff0c;完成TCP三次握手后&#xff0c;连接器就开始认证身份&#xff0c;如果身份认证成功&…

数据结构-串、数组和广义表

数据结构之串、数组和广义表 串的定义一、串的顺序存储结构1.1、串的链式存储结构1.2、串的模式匹配算法1.2.1、Brute-Force简称为BF算法1.2.2、KMP算法 数组的定义2.1、数组的顺序存储结构2.2、数组的特点&#xff1a;结构固定-----维数和维界不变2.3、特殊矩阵的压缩存储 广义…

密码学—Kasiski测试法Python程序

Kasiski Kasiski是辅助破解Vigenere的前提工作&#xff0c;Kasiski是猜测加密者使用Vigenere密码体系的密钥的长度&#xff0c;Kasiski只是猜测长度而已&#xff0c;所以说是辅助破解Vigenere 若密文中出现两个相同的密文段(密文段的长度m>2)&#xff0c;则它们对应的明文&…

leetcode第66题:加一

题目 这是一道简单的小题&#xff0c;自己却也没写出来。。。逆序遍历数组digits&#xff0c;用carry标记当前元素是否需要进位&#xff08;0不要&#xff0c;1要&#xff09;。 若carry1&#xff0c;则当前元素要么置0&#xff0c;要么自加1。自加1之后&#xff0c;再也不需要…

【深入了解Spring Cloud Alibaba Nacos:服务注册和配置中心】—— 每天一点小知识

&#x1f4a7; 深入了解 S p r i n g C l o u d A l i b a b a N a c o s &#xff1a;服务注册和配置中心 \color{#FF1493}{深入了解Spring Cloud Alibaba Nacos&#xff1a;服务注册和配置中心} 深入了解SpringCloudAlibabaNacos&#xff1a;服务注册和配置中心&#x1f4a7;…

深入浅出解析LoRA完整核心基础知识 | 【算法兵器谱】

Rocky Ding 公众号&#xff1a;WeThinkIn 写在前面 【算法兵器谱】栏目专注分享AI行业中的前沿/经典/必备的模型&论文&#xff0c;并对具备划时代意义的模型&论文进行全方位系统的解析&#xff0c;比如Rocky之前出品的爆款文章Make YOLO Great Again系列。也欢迎大家提…

让Ai帮我们画个粽子,它会画成什么样呢?

让Ai帮我们画个粽子&#xff0c;它会画成什么样呢&#xff1f; 本文目录&#xff1a; 一、Ai绘图技术的现状 二、看看Ai理解的粽子是怎样的 2.1、基础粽子 2.2、生成不同风格的粽子 2.2.1、真实风格的粽子 2.2.2、插图风格的粽子 2.2.3、3D风格的粽子 2.2.4、卡通风格…

Mysql锁机制介绍

Mysql锁机制 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中&#xff0c;除传统的计算资源(如CPU、RAM、I/O等)的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题&#xff0…

vue-cli笔记

vue的生命周期&#xff1a; 借鉴react 钩子函数&#xff1a; change() 挂载完毕&#xff0c;vue完成模板解析&#xff0c;并把初始的真实的dom元素放入到页面后执行 beforeCreate() {// 数据代理和数据监测创建之前console.log(beforeCreate) }, created() {console.l…

深度:全面解析数据智能的金融“炼金术”!

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 金融以其财富效应&#xff0c;成为最新科技的试金石。一项新技术出来后&#xff0c;人们首先闪过的念头就是“能不能用它赚钱”。例如&#xff0c;ChatGPT带火了大模型&#xff0c;人们也开始将目标聚焦到大模型在金融领域的…

【实战】 JWT、用户认证与异步请求(下) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(五)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求1~56.用useAuth切换登录与非登录状态7.用fetch抽象通用HTTP请求方法&#xff0c;增强通用性8.用useHt…

AR宇航员互动体验软件:虚拟与现实叠加增强体验感

随着科技的不断发展&#xff0c;人们对太空探索的兴趣和热情也越来越高涨。为了满足人们对太空探索的渴望&#xff0c;广州华锐互动研发了宇航员AR模拟体验软件&#xff0c;这种软件可以让用户身临其境地体验太空探索的过程&#xff0c;提供一种全新的、令人兴奋的太空探索新体…

css基础知识十一:CSS3新增了哪些新特性?

一、是什么 css&#xff0c;即层叠样式表&#xff08;Cascading Style Sheets&#xff09;的简称&#xff0c;是一种标记语言&#xff0c;由浏览器解释执行用来使页面变得更为美观 css3是css的最新标准&#xff0c;是向后兼容的&#xff0c;CSS1/2的特性在CSS3 里都是可以使用…