【C++】C向C++的知识过度(上)

2023-05-16

文章目录

  • 一、C与C++的区别
    • 1.1 C是面向过程的
    • 1.2 C++是面向对象的
    • 1.3 编译器的区别
  • 二、C与C++默认代码的不同
  • 三、命名空间
    • 3.1 关键字`namespace`去定义自己的名字空间。
    • 3.2 访问不同命名空间中的变量或函数
    • 3.3 using关键字
  • 四、C++中的struct结构体与字符串
    • 4.1 C++中的结构体与C中结构体的区别
    • 4.2 认识C++中string类:
  • 五、C++中bool变量

一、C与C++的区别

1.1 C是面向过程的

C语言是面向过程的:就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。但是随着程序大型化之后,C也暴露了不足之处。
C语言的缺点:程序大型化所带来的分解的难度的提高,当程序过大时,就会出现难以分解,以及分解所带来的代码的严重冗余,及后期维护成本的提高。

1.2 C++是面向对象的

C++是面向对象的:把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的属性,行为。
在这里插入图片描述
面向对象有三大特性:封装性,继承性和多态性

总之,面向对象就是高度实物抽象化、面向过程就是自顶向下的编程。

1.3 编译器的区别

编译器不同:Linux中 C++程序使用g++编译器,C程序使用gcc编译器。使用g++也可以编译c程序。但是gcc是无法编译C++程序的。

二、C与C++默认代码的不同

以hello world!为例

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

与C语言相比,C++标准库的头文件是都不带.h的

#include <iostream>

C++中在使用C表准库时,头文件前要加c

#include <cstdio>

<<是一个运算符重载函数 operatoer<<(形参列表)
cout <<等价于cout.operator<<(实参),相当于C库函数printf
endl相当于C语言的换行符

C库的输入函数:scanf
在C++中的输入函数 cin >> 相当于scanf

在C++中表示字符串有了专门类型:string类型
在C中字符串是没有类型,只有表现形式:字符指针,字符数组但是会有容量和尾部\0的问题。

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    string buff;
    cin >> buff;
    cout << buff <<endl;
    return 0;
}

结果展示:
在这里插入图片描述

三、命名空间

3.1 关键字namespace去定义自己的名字空间。

namespace yemaoxu//名字空间标识符
{
    //在自定义的命名空间中定义自己的变量或函数或类。
    int a=10;
    //...
}

所有的名字空间就是在全局空间中定义的,相当于是在全局空间中又自定义一个不同名字的全局作用域。

3.2 访问不同命名空间中的变量或函数

使用::域名访问符来访问指定空间中的变量或函数名或类。

访问命名空间中的变量的方式: 名字空间名 + :: 域名访问符 指定访问某个名字空间中的变量或函数。

对于嵌套的名字空间,使用::逐级访问。

#include <iostream>

using namespace std;

namespace yemaoxu//名字空间标识符
{
    //在自定义的命名空间中定义自己的变量或函数或类。
    int a=10;
    void my_func()
    {
        cout << "我是夜猫徐" << endl;
    }
}

namespace study
{
    int a=100;
    void my_func()
    {
        cout << "学习C++" << endl;
    }
}
//名字空间嵌套
namespace A
{
    namespace B
    {
        int a=1000;
        void my_func()
        {
            cout << "请关注我吧!" << endl;
        }
    }
}
int main()
{
    cout << yemaoxu::a << endl;
    cout << study::a << endl;
    yemaoxu::my_func();
    study::my_func();

    cout << A::B::a << endl;
    A::B::my_func();
    return 0;
}

代码结果展示:
在这里插入图片描述

3.3 using关键字

  1. 导入具体的标识符:
    使用using + 名字空间名 + 具体的哪一个变量或函数或类 的名字标识符。
  2. 导入名字空间中的所有标符识 :
    using + namespece + 哪个名字空间
#include <iostream>

//using namespace std;
using std :: cout;
using std :: endl;

namespace yemaoxu//名字空间标识符
{
    //在自定义的命名空间中定义自己的变量或函数或类。
    int a=10;
    void my_func()
    {
        cout << "我是夜猫徐" << endl;
    }
}

namespace study
{
    int a=100;
    void my_func()
    {
        cout << "学习C++" << endl;
    }
}
//名字空间嵌套
namespace A
{
    namespace B
    {
        int a=1000;
        void my_func()
        {
            cout << "请关注我吧!" << endl;
        }
    }
}

using namespace A::B;

int main()
{
    using yemaoxu::a;//就近原则
    cout << a << endl;
    my_func();

    return 0;
}

代码结果展示:
在这里插入图片描述

四、C++中的struct结构体与字符串

4.1 C++中的结构体与C中结构体的区别

C中使用struct结构体:

是不可以直接在结构体内部定义函数的。只能通函数指针的方式间接调用一个全局函数的形式来表示。

#include <stdio.h>

typedef struct
{
    char name[32];
    int age;
    void (*pfunc)();
}stu_t;
void my_func()
{
    printf("学习C++\n");
}
int main()
{
    stu_t stu={"yemaoxu",20,my_func};
    printf("%s \n",stu.name);
    printf("%d \n", stu.age);
    //通过函数指针的回调调用一个全局函数来表示stu这个结构体变量的行为。
    stu.pfunc();
    return 0;
}

代码结果展示:
在这里插入图片描述

C++中结构体:

多了封装性,只不过默认采用的公有的访问权限public
C++中的结构体的大小与非静态属性有关,同时遵从C中的结构体对齐原则,与结构体中成员函数无关。因为C++中的类就是从C中的结构体衍生而来。

把这种定义在结构内部的函数称之为成员函数。

#include <iostream>

using namespace std;
struct stu
{
public://共有访问权限
    char name[32];
    int age;
    void my_func()
    {
        printf("学习C++\n");
    }
private://私有访问权限    
    void you_func()
    {
        printf("学习C++\n");
    }
};

int main()
{
    stu a={"yemaoxu",20};
    cout << a.name << endl;
    cout << a.age << endl;
    a.my_func();
    //a.you_func();私有访问权限会报错
    return 0;
}

代码结果展示:
在这里插入图片描述

4.2 认识C++中string类:

C中是没有字符串的类型,只有字符串的表示形式:1.字符指针 2.字符数组。
在C使用字符串要注意:字符长度及尾\0的问题。

在C++的面向对象这个世界中,对于底层数据元素操作,我们把这个底层操作封装了起来,成为了一个专属性字符串类型。String类型。

C++string 字符串类的API的使用:

  1. at()接口
    查看第几个元素的字符;
  2. size()接口
    查看有多少个字符;
  3. []中括号与at()一样
    在使用string定义的字符串,当访问指定的字符时,我们更推荐使用at,因为他有边界检查;
  4. +号运算符重载
    连接两个字符串;
  5. append()接口
    连接一个字符串
#include <iostream>

using namespace std;

int main()
{
    string str1;
    str1="yemaoxu";
    string str2;
    str2=" study C++";
    cout << str1 << endl;
    cout << str1.size() <<endl;
    cout << str1.at(2) << endl;
    cout << str1[2] << endl;
    cout << "---------------------------" << endl;
    cout << str1+str2 << endl;
    string str=str1+=str2;
    cout << str << "," << str1 <<endl;
    string str3=str1.append(" very good");
    cout << str3 << "," <<  str1  << endl;
    return 0;
}

代码结果展示:
在这里插入图片描述

五、C++中bool变量

在C中,0为假,非0为真,即使是个负数也是为真。

在C++中我们表示布尔有了专门一个布尔类型,内置类型,使bool来表示。
真关键字:true
假关键字:false
都是unsigned char 类型1字节,true为1,false为0。

#include <iostream>
using namespace std;
int main()
{
    bool ok;
    ok = true;
    cout << ok <<endl;
    ok = false;
    cout << ok << endl;
    cout << sizeof (bool) << endl;
    return 0;
}

代码结果展示:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++】C向C++的知识过度(上) 的相关文章

  • C语言中字符串大小与长度的区分

    字符串大小和字符串长度不同 xff1a 字符串大小指该字符串占用多少空间 字符串长度指该字符串的字符个数
  • 【字符串函数】strcat的使用及原理

    1 strcat函数的函数声明 char strcat char Destination const char Source 2 strcat函数的头文件 include lt string h gt 3 strcat函数的使用 strca
  • 【DRM】DRM Display Driver Guide

    https zhuanlan zhihu com p 534267979 目录 收起
  • TCP协议

    1 TCP协议的可靠传输 我们知道TCP协议的特点有 有连接 可靠传输 面向字节流 全双工 其中连接 面向字节流和全双工在 网络编程 该文章中详细说明了 而要深入了解TCP协议 了解可靠传输也是重中之重 可靠传输也是TCP协议的一大特点 那
  • c/c++程序运行不出结果?

    1 xff0c 条件语句未执行 在运行过程中 xff0c 用到if或while等条件语句 xff0c 条件之后的语句没有执行就结束了 xff0c 且输出变量也未初始化 xff0c 当然就输出不了任何东西了 xff1b 2 xff0c 变量未
  • 【解救ROS】关于ros机器人(小车)动态调试PID参数

    1 打开终端 xff0c 连接树莓派 ssh clbrobot 64 clbrobt 2 打开底盘节点 roslaunch clbrobot bringup launch 3 再打开一个终端 ssh clbrobot 64 clbrobt
  • 十进制转十六进制(C语言)

    首先要注意输入非负整数的范围 xff1a 这里用long表示 xff1b long 取值 2147483648 2147483647 include lt stdio h gt int main long n int i 61 0 j ch
  • C语言之数组的定义及其使用方法

    作者 xff1a 从未止步 博客主页 xff1a 从未止步的博客 专栏 xff1a 和我一起学C 语录 xff1a Every day is a second chance 行动是理想最高贵的表达 xff0c 给大家介绍一款超牛的斩获大厂o
  • python之常量的定义

    常量 xff1a 与C语言不同的是 xff0c python中并没有用来修饰常量的修饰符 xff0c 在python中可以通过自定义实现常量 xff0c 要求常量的标识符必须全是大写字母 xff0c 且该值不能被修改 举例 xff1a PI
  • C语言之根据摄氏温度求华氏温度

    求摄氏温度26 C对应的华氏温度 计算公式 xff1a f 61 9 c 5 43 32 xff0c 式中 xff1a c表示摄氏温度 xff0c f表示华氏温度 输入输出示例 xff1a celsius 61 26 fahr 61 78
  • python文件的操作和异常之异常

    异常 xff1a python使用称为异常的特殊类对象来管理程序执行期间发生的错误 xff0c 每当发生让python不知所措的错误时 xff0c 他都会创建一个异常的对象 如果你编写了处理该异常的代码 xff0c 程序将继续进行 xff0
  • Java---抽象类和接口

    抽象类 xff1a 抽象类的基本概念 xff1a 在面向对象的概念中 xff0c 所有的对象都是通过类来描述并创建的 xff0c 但是有一种特殊的类 xff0c 并不能用完整的信息来描述一个具体的对象 xff0c 这样的类就是抽象类 xff
  • 通过基于注解的声明式事务实现事务功能~

    编程式事务 xff1a 事务功能的相关操作全部通过自己编写代码来实现 xff1a span class token class name Connection span conn span class token operator 61 s
  • 《DRM 专栏》| 彻底入门 DRM 驱动

    https cloud tencent com developer article 2021477 前面的 DRM 应用程序系列文章中 xff0c 我们学习了如何使用 libdrm 接口编写 DRM 应用程序 本篇我们将进入一个全新的世界
  • 声明式事务的属性~

    说明 xff1a 本篇文章的代码是基于上篇文章之上的 xff0c 如有需要 xff0c 请移至这篇文章 声明式事务的属性 xff1a 只读 xff0c 超时 xff0c 回滚策略 xff1a 事务属性 xff1a 只读 对一个查询操作来说
  • 配置SpringMVC的前端控制器DispatcherServlet时,<url-pattern>中“/“和“/*“的区别

    span class token comment lt 表示所匹配的请求可以是login或 html或 js或 css方式的请求路径 xff0c 但是 不能匹配 jsp请求路径的请求 xff0c 因此就可以避免在访问jsp页面时 xff0c
  • 解决在idea中构建项目出现不能创建java类,只能创建文件的问题~

    注意 xff1a 一定要根据箭头的指向顺序进行 修改完成 xff0c 如下所示 xff1a
  • 解决在idea中构建项目时,出现的java:错误:不支持发行版本 5

    错误描述 xff0c 如下所示 xff1a 错误原因 xff1a idea中默认配置中有几个地方的jdk版本与实际不一致 解决办法 xff1a 第一步 xff1a 第二步 xff1a 第三步 xff1a 第四步 xff1a 第五步 xff1
  • 【C++】搭建HTTP服务器

    目录 项目介绍 网络协议栈介绍 协议分层 数据的封装与分用 HTTP相关知识介绍 HTTP的特点 URL格式 URI URL URN HTTP的协议格式 HTTP的请求方法 HTTP的状态码 HTTP常见的Header CGI机制介绍 CG
  • vscode 出现“未定义标识符cout”

    1 检查是否有 xff1a include lt iostream gt using namespace std 2 若有 xff0c 可以修改一下vscode的设置 xff1a 将C Cpp intelli Sense Engine的 D

随机推荐

  • FreeRtos.STM32f103c8t6调用vTaskDelay时间不准问题

    1 选择晶振要选择正确 2 内核选择的主频要和实际一致 define configCPU CLOCK HZ unsigned long 72000000 系统主频 define configTICK RATE HZ TickType t 1
  • FreeRtos外部中断使用

    首先是config文件里的宏 ARM Cortex M 架构自身允许最多 256 个不同的优先级 xff08 最多有 8 个 优先级位 xff0c 因此从 0 到 0xff 的优先级都是可能的 xff09 xff0c 但绝大多数使用 ARM
  • MPU-6050资源介绍

    介绍 作用 xff1a 测量三轴加速度和三轴角速度 测三轴加速度 xff1a 加速度计 测三轴角速度 xff1a 陀螺仪 加速度计具有静态稳定性 xff0c 动态不稳定性 陀螺仪具有静态不稳定性 xff0c 动态稳定性 需要互补滤波 xff
  • STM32硬件I2C

    以I2C2为例子 硬件I2C不需要我们手动去翻转电平 首先配置I2C xff1a 配置GPIO xff0c 配置复用功能I2C 配置复用开漏 xff0c 使能I2C I2C起始条件函数 64 param I2Cx where x can b
  • 最简单的 DRM 应用 & drm设备不工作

    https zhuanlan zhihu com p 341895843 https zhuanlan zhihu com p 75321245 编写最简单的 DRM 应用 主程序 xff1a int main int argc char
  • spi通信

    特点 常规四线通信方式 一根片选线 xff0c 一根时钟线 xff0c 两根数据线 xff1a 一根是主进从出线 xff0c 一根主出从入线 同步 xff0c 全双工 xff0c 通信方式 和谁通信就将谁的片选线拉低 xff0c 每增加一个
  • FreeRtos任务通信之消息队列

    入队阻塞 xff1a 往队列写数据时 xff0c 队列满时的阻塞 当阻塞结束时 xff0c 优先级最高的任务优先进入就绪态 xff0c 同 优先级时 xff0c 阻塞时间最长的进入就绪态 出队阻塞 xff1a 读队列时 xff0c 队列为空
  • STM32F103C8T6 ADC功能

    12位逐次逼近型ADC 1us转换时间 输入电压0 3 3v和转化范围0 2 12 1 xff08 0 4095 xff09 成线性关系 2个ADC资源 xff0c ADC1和ADC2 xff0c 10个外部通道 有两种转换单元组 xff1
  • stm32串口实验

    目录 xff08 一 xff09 STM32 串口简介 二 软件设计 xff08 三 xff09 效果 xff1a 1 实现功能 xff1a STM32 通过串口和上位机的对话 xff0c STM32 在收到上位机发过来的字符串后 xff0
  • 基于stm32的GPS解析数据

    目录 1 GPS模块 2 GPS发送的数据格式 3 软件设计 3 1配置好串口 3 2然后写串口中断函数 效果 1 GPS模块 2 GPS发送的数据格式 GPRMC lt 1 gt lt 2 gt lt 3 gt lt 4 gt lt 5
  • 大疆遥控控制M3508电机二(基于HAL库)

    接上一篇文章 xff0c 话不多说直接开始 一 打开我们创建的工程文件 xff0c 先就建立一个文件夹用来存放我们写的子文件 xff08 不建立也行 xff09 xff0c 然后建立pid h xff0c pid c存入我们建立的文件夹中
  • aruco_ros 在相机图像中显示的坐标轴姿态与TF发布的姿态不一致 解决方法

    aruco ros 在相机图像中显示的坐标轴姿态与TF发布的姿态不一致 解决方法 运行环境问题描述解决方案 运行环境 系统版本 xff1a Ubuntu 16 04 ROS版本 xff1a Kinetic 问题描述 在进行手眼标定过程中 x
  • 安装vscode的时候没有勾选快捷方式用vscode打开文件,如何用vscode快速打开文件或者文件夹

    1 需要在注册表里面添加内容可以实现 xff0c 下面有一种简单的方式来完成这个操作 2 需要在电脑桌面新建一个Open File With VS code reg 文件然后用打开文件 xff0c 将以下代码复制 Windows Regis
  • C语言学习笔记->const和define区别

    1 define 是预编译指令 xff0c 而const 是普通变量的定义 define定义的宏是在预处理阶段展开的 xff0c 而const定义的只读变量在编译运行中使用 2 const定义的是变量 xff0c 而define定义的是常量
  • 基于栈、寄存器的优缺点

    基于栈的优点 xff1a 对硬件的依赖不高 xff0c 跨平台性 缺点 xff1a 使用的指令集高基于寄存器的优点 xff1a 相对于栈来说 xff0c 寄存器的性能高 xff0c 使用的指令集少 Java代码执行流程 xff1a java
  • Makefile文件的编写(实例详解)

    1 什么是Makefile xff1f 一个工程中的源文件不计其数 xff0c 其按类型 功能 模块分别放在若干个目录中 xff0c Makefile定义了一系列的规则来指定哪些文件需要先编译 xff0c 哪些文件需要后编译 xff0c 哪
  • 用C语言实现万年历的代码及思路(详细教程)

    万年历程序要求 xff1a 1 当选择1的时候 xff0c 输入年 xff0c 打印输入的这一年12月的日历 2 当选择2的时候 xff0c 输入年 月 xff0c 打印输入这一年这一月的日历 实现效果 xff1a 选择1时 span cl
  • 有符号数和无符号数参与运算时的问题

    陷阱题目 xff1a 下面的代码输出是 xff08 xff09 span class token macro property span class token directive hash span span class token di
  • 【Linux网络编程】基于UDP实现多人聊天室

    文章目录 一 UDP的概念1 1 UDP1 2 UDP特点 二 采用UDP实现多人聊天室原因三 多人聊天室项目功能四 实现多人聊天室项目流程分析4 1 前期准备4 1 1 定义结构体4 1 2 定义链表 4 2 多人聊天室服务器4 2 1
  • 【C++】C向C++的知识过度(上)

    文章目录 一 C与C 43 43 的区别1 1 C是面向过程的1 2 C 43 43 是面向对象的1 3 编译器的区别 二 C与C 43 43 默认代码的不同三 命名空间3 1 关键字 96 namespace 96 去定义自己的名字空间