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

这篇具有很好参考价值的文章主要介绍了Linux 学习记录40(C++篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

一、QT软件的使用

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

1. 新建工程

1.Linux 学习记录40(C++篇)
2. 新建非QT的文件
Linux 学习记录40(C++篇)
3. 选择创建的路径
Linux 学习记录40(C++篇)
4. 选择编译套件(后面一直下一步即可)
Linux 学习记录40(C++篇)
5. 修改文件编码
Linux 学习记录40(C++篇)
Linux 学习记录40(C++篇)

二、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;
}

输出结果:
Linux 学习记录40(C++篇)

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
    Linux 学习记录40(C++篇)
#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语言中是不支持字符串类型的

Linux 学习记录40(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;
}

运行结果:
Linux 学习记录40(C++篇)

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;
}

报错:
Linux 学习记录40(C++篇)

(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;
}

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

(1. getline 函数

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

    getline(cin,str1);

    cout << str1 << endl;

    return 0;
}

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

六、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;
}

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

思维导图

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

练习

1. 字符串逆置

定义一个命名空间Myspace,包含以下函数:将一个字符串中的所有单词进行反转,并输出反转后的结果。例如,输入字符串
为”Hello World”,输出结果为"olleH dlrow”,并在主函数内测试该函数。文章来源地址https://www.toymoban.com/news/detail-502760.html

#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;
}

到了这里,关于Linux 学习记录40(C++篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WinFrom、C# 学习记录五 开发一个鼠标自动点击小软件

            经常会被问到需要点击软件的,主要都是玩游戏的盆友,但是也有其它用途的。所以简单弄了一个,打算每当有时间,有需求,就加一些小功能。         这里主要是要记录一下相关开发工作,也记录一些使用/更新的信息。         【2022/08/22】版本v1.0(初始版

    2024年02月16日
    浏览(48)
  • 近40个开源的工业软件-工业4.0

    不同的工业流程,需要不同的工业软件。面向研发设计环节的开源软件,今天就来介绍一下面向生产控制环节的开源软件,主要为可编程逻辑控制器(PLC)、分布式控制系统(DCS)、生产执行系统(MES)、仓库管理系统(WMS)。 先从最靠近硬件端的 PLC 开始吧。 1、openPLC Open

    2024年02月04日
    浏览(38)
  • PADS VX2.7学习记录04-PADS Layout软件操作

    命令:工具——选项(快捷键Ctrl+Enter) 常规设置: 剩下的默认即可。 操作命令: 设置——显示颜色 1、背景,板框,选择,连接,亮显固定设置 2、显示网络名称,都打钩 3、可以根据自己喜欢的 颜色配置 4、把自己喜欢的颜色配置保存起来,方便下次使用 命令:查看——

    2024年02月08日
    浏览(46)
  • 软件使用错误(警告)记录(持续更新)

     本博客用以记录在软件使用过程中所遇到的错误和关键性的警告,以及这些警告和错误的解决方法,方便日后查看以及能为其他遇到同样问题的人提供一个可能的解决方法。需要注意的是,此处记录的方法是根据本人遇到的问题记录的,所以在解决自己遇到的问题的时候需

    2023年04月08日
    浏览(65)
  • PADS VX2.7学习记录06-PADS Router软件功能操作

    工具——选项 根据自己喜欢的颜色设置即可 PADS Router软件中,走线是F3快捷键 修线是Shift+S 走线时,打孔F4 1、根据BGA的大小,先确定过孔的大小 2、设置规则,安全间距,线宽,过孔 3、操作命令:编辑——特性 4、选择BGA器件,鼠标单击右键,选择扇出即可 链接: BGA扇出介绍

    2024年02月05日
    浏览(43)
  • 【linux】记录archlinux软件包更新后lualatex无法编译的一种解决方案

    操作系统:archlinux Kernel: 6.4.11-arch2-1 包管理器:pacman 日期:2023.08.25 今天一如往常地进行软件包更新: 随后,在使用luelatex对我的论文(latex)进行编译时,无法编译。想到在软件更新前还能编译,更新后就无法编译,必然是软件包版本问题。在命令行运行lualatex报错: 所以

    2024年02月11日
    浏览(42)
  • linux基础知识学习记录

    计算机组成:计算机主要硬件和软件2部分组成。 计算机软硬件的概念:硬件是可以看得见的物理实体,软件是运行在硬件上不可见的程序。 计算机软硬件的关系:没有硬件,程序就不会存在;没有软件,硬件就是破铜烂铁。 计算机硬件的组成:CPU(中央处理器)、内存、硬盘

    2024年02月07日
    浏览(42)
  • linux驱动开发入门(学习记录)

    2023.7.6及7.7 、

    2024年02月15日
    浏览(36)
  • Linux 学习记录58(ARM篇)

    PPI:私有外设中断号:(ID:0~15) SPI:共享外设中断号:(ID:16~31) SGI:软件产生的中断号:(ID:0~287) 总结: GIC层一共管理288个中断号(ID:0 ~ 287),16个SGIS,16个PPIS,256个SPIS 例: 功能:使能CPU 功能:设置GICD层中断使能 该寄存器共有8个(0-8),用于使能GICD层的的288个中断号,每个寄存器

    2024年02月15日
    浏览(40)
  • Linux 学习记录52(ARM篇)

    基本的数据处理指令 数据搬移指令 数据移位指令 算数运算指令 位运算指令 比较指令 跳转指令 内存读写指令 程序状态寄存器读写指令 软中断指令 (1. 格式 (2. 指令码类型 (3. 使用示例 能够当作指令的一部分去执行的数据叫做立即数。一个立即数可以通过一个0-255之间的数字

    2024年02月17日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包