C++学习Day01之C++对C语言增强和扩展

目录

  • 一、程序及输出
    • 1.1 全局变量检测增强
    • 1.2 函数检测增强
    • 1.3 类型转换检测增强
    • 1.4 struct增强
    • 1.5 bool类型扩展
    • 1.6 三目运算符增强
    • 1.7 const增强
      • 1.7.1 全局Const对比
      • 1.7.2 局部Const对比
      • 1.7.3 Const变量初始化数组
      • 1.7.3 Const修饰变量的链接性
  • 二、分析总结


一、程序及输出

1.1 全局变量检测增强

c 正常编译输出。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>//1、全局变量检测增强
int a;
int a = 10;
int main(){printf(" %d\n",a);system("pause");return EXIT_SUCCESS;
}

c++ 会检测出重定义
在这里插入图片描述

1.2 函数检测增强

c 正常编译输出

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
getRectS( w  , h)
{return w *h;
}
void test01()
{printf("%d\n", getRectS(10, 10, 10));
}
int main(){test01();system("pause");return EXIT_SUCCESS;
}

在这里插入图片描述

c++ 返回值检测、形参类型检测、函数调用参数个数检测
在这里插入图片描述

1.3 类型转换检测增强

c 类型检测不严谨 malloc 返回类型void*,正常编译通过。

void test02()
{char * p = malloc(64);
}

c++ 必须进行类型转换才能通过。
在这里插入图片描述
在这里插入图片描述

1.4 struct增强

c 结构体中不能有函数
在这里插入图片描述
c 创建结构体变量必须加关键字struct
在这里插入图片描述

c++ 可以放函数,创建结构体变量,可以简化关键字 struct
在这里插入图片描述

1.5 bool类型扩展

c 没有bool类型
在这里插入图片描述
c++ 有bool类型
在这里插入图片描述

1.6 三目运算符增强

c 三目运算符变量作为左值不可修改。
在这里插入图片描述

c++ 三目运算符增强,返回变量作为左值可被修改。

#include<iostream>
using namespace std;
void test05()
{int a = 10;int b = 20;printf("ret = %d\n", a > b ? a : b);(a < b ? a : b )= 100; // C++下返回的是变量  b = 100printf("a = %d\n", a);printf("b = %d\n", b);
}
int main(){test05();system("pause");return EXIT_SUCCESS;
}

在这里插入图片描述

1.7 const增强

1.7.1 全局Const对比

c 不可修改
在这里插入图片描述
使用指针修改

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int m_A = 100; // 受到常量区保护,运行修改失败
void test05()
{int * r = &m_A;*r = 200;printf("m_A = %d\n",m_A);
}
int main(){test05();system("pause");return EXIT_SUCCESS;
}

输出: 退出,没有修改成功
在这里插入图片描述

c++ 与C结论一致

1.7.2 局部Const对比

c 可以被修改

#include<stdio.h>
#include<string.h>
#include<stdlib.h>void test05()
{//局部constconst int m_B = 100; //分配到栈上//m_B = 200;  //直接修改会报错int * p = &m_B; //指针修改成功*p = 200; printf("%d\n", m_B);
}
int main(){test05();system("pause");return EXIT_SUCCESS;
}

输出:
在这里插入图片描述
c++ 修改失败

#include<iostream>
using namespace std;
void test06()
{//局部constconst int m_B = 100;//m_B = 200;//直接修改会报错int * p = (int *)&m_B;//指针修改失败*p = 200;cout << "m_B = " << m_B << endl;
}
int main(){test06();system("pause");return EXIT_SUCCESS;
}

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

1.7.3 Const变量初始化数组

c 初始化失败 C语言下Const修饰的是伪常量
在这里插入图片描述
c++ 初始化成功 :C++下const修饰的变量 称为常量 ,可以初始化数组
在这里插入图片描述

1.7.3 Const修饰变量的链接性

c 下const修饰全局变量默认是外部链接属性
主文件

#include<stdio.h>
#include<string.h>
#include<stdlib.h>int main(){extern const int g_a; printf("g_a = %d\n", g_a);system("pause");return EXIT_SUCCESS;
}

另外一个.c文件

 const int g_a = 100;

输出:
在这里插入图片描述
解析:

extern 关键字用于声明一个外部变量
c 下const修饰全局变量默认是外部链接属性,所以.c文件定义的变量没有使用extern 关键字,但是主文件能够通过extern关键字链接到真正需要的变量,体现了const修饰全局变量默认是外部链接属性这一特点。

c++下const修饰全局变量默认是内部链接属性
主文件

#include<iostream>
using namespace std;int main(){extern const int g_b ; cout << "g_b = " << g_b << endl;;system("pause");return EXIT_SUCCESS;
}

另外一个.cpp文件

extern const int g_b = 1000;

输出:
在这里插入图片描述
解析:

extern 关键字用于声明一个外部变量
两个文件都加了extern ,定义是在主文件里定义的,但是初始化却是在另一个.cpp文件初始化的,因为c++中const修饰全局变量默认是内部链接属性,所以外部文件初始化时需要使用extern关键字声明,如果去掉会编译报错。


二、分析总结

C++对C语言增强和扩展如下:

1.全局变量检测增强  C++检测出重定义
2.函数检测增强  返回值检测、形参类型检测、函数调用参数个数检测
3.类型转换检测增强  类型转换检测更严谨
4.struct增强   C++可以放函数,创建结构体变量,可以简化关键字 struct
5.bool类型扩展  扩展添加bool类型
6.三目运算符增强  返回变量作为左值可被修改
7.const增强  c++下const修饰是真常量,且可以用来初始化数组
8.Const修饰变量的链接性  c 下const修饰全局变量默认是外部链接属性,   c++下const修饰全局变量默认是内部链接属性

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

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

相关文章

【Java开发岗面试】八股文—微服务、消息中间件

声明&#xff1a; 背景&#xff1a;本人为24届双非硕校招生&#xff0c;已经完整经历了一次秋招&#xff0c;拿到了三个offer。本专题旨在分享自己的一些Java开发岗面试经验&#xff08;主要是校招&#xff09;&#xff0c;包括我自己总结的八股文、算法、项目介绍、HR面和面试…

【自然语言处理】P2 PyTorch 基础 - 张量

目录 安装 PyTorch张量创建张量操作张量索引、切片、联合操作 CUDA张量 本系列博文我们将使用 PyTorch 来实现深度学习模型等。PyTorch 是一个开源的、社区驱动的深度学习框架。拥有强大的工具和库生态系统&#xff0c;包含 TorchVision&#xff08;用于图像处理&#xff09;、…

面试经典150题 -- 哈希表(总结)

总的链接 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 383 . 赎金信 用哈希表模拟 ; 用两个长为26的整数数组模拟哈希表&#xff0c;分别统计r和m中的频次&#xff0c;如果在m中字符出现的都比r中的小&#xff0c;那么m一…

日志记录——单片机可执行文件合并

一&#xff1a;需求场景 现在有一片单片机&#xff0c;执行程序包括自定义boot和应用程序app, 在将打包好的固件给到生产是有以下问题&#xff0c;由于要通过jlink烧录boot&#xff0c;然后上电启动boot&#xff0c;通过boot烧录初始化程序&#xff0c;过程过于复杂&#xff0…

Web实战丨基于django+hitcount的网页计数器

文章目录 写在前面Django简介主要程序运行结果系列文章写在后面 写在前面 本期内容 基于djangohitcount的网页计数器 所需环境 pythonpycharm或vscodedjango 下载地址 https://download.csdn.net/download/m0_68111267/88795611 Django简介 Django 是一个开源的、基于 …

消息总线在微服务中的应用

直连式配置中心 上一篇文章介绍了 Spring Cloud 中的分布式配置组件 Config&#xff0c;每个服务节点可以从Config Server 拉取外部配置信息。但是似乎还有一个悬而未决的问题&#xff0c;那就是当服务节点数量非常庞大的时候&#xff0c;我们不可能一台一台服务器挨个去手工触…

Linux系统编程:进程

目录 相关指令 ps指令 top指令 相关函数及其示例 getpid() getpid()示例&#xff1a; fork() 示例&#xff1a; 示例2&#xff1a;fork()返回值 Fathers pid is 14532.This is FartherProcess, pid is 14532.This is SonProcess, pid is 14533. vfork() 示例&am…

RabbitMQ下载与安装

一、Docker安装 1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一&#xff1a;在线拉取 docker pull rabbitmq:3-management方式二&#xff1a;从本地加载 上传到虚拟机中后&#xff0c;使用命令加载镜像即可&#xff1a; docker load -i mq.ta…

Docker上安装配置tomcat

目录 1. 拉取镜像 2. 创建运行镜像 3. 查看是否创建成功 ps&#xff1a;如果出现404错误 tomcat目录结构 1. 拉取镜像 这里使用 tomcat:8.5.40 版本作为安装 docker pull tomcat:8.5.40 2. 创建运行镜像 docker run -d --name tomcat -p 8080:8080 \--privilegedtrue …

改进的 K-Means 聚类方法介绍

引言 数据科学的一个中心假设是&#xff0c;紧密度表明相关性。彼此“接近”的数据点是相似的。如果将年龄、头发数量和体重绘制在空间中&#xff0c;很可能许多人会聚集在一起。这就是 k 均值聚类背后的直觉。 我们随机生成 K 个质心&#xff0c;每个簇一个&#xff0c;并将…

webstorm、vscode、HBuilder配置eslint检查

你们好&#xff0c;我是金金金。 场景 每个人写的代码都有自己所属的风格&#xff0c;所以项目中统一代码风格特别重要&#xff0c;新开的项目中如何快速配置ESLint呢&#xff1f; 安装 npm install --save-dev eslint ----安装eslintnpm install --save-dev eslint-plugin-vu…

事件分发机制:从OnTouchListener开始,按钮变色的Demo

要彻底弄清楚事件分发机制&#xff0c;先要明白OnTouchListener的作用。 我们看下Android 1.6上&#xff0c;OnTouchListener的代码定义&#xff0c;源码在线地址&#xff1a;Android 1.6 sdk4 View.java 可以看到&#xff0c;OnTouchListener就是View类中的一个public接口&am…

django+flask警务案件信息管理系统python-5dg53-vue

1&#xff09;用户在后台页面各种操作可及时得到反馈。 &#xff08;2&#xff09;该平台是提供给多个用户使用的平台&#xff0c;警员使用之前需要注册登录。登录验证后&#xff0c;警员才可进行各种操作[10]。 &#xff08;3&#xff09;管理员用户拥有信息新增&#xff0c;修…

Git 实战场景过程(工作总结篇)

目录 前言1. Git远程仓库建立分支&#xff0c;本地未显示1.1 问题所示1.2 知识补充 2. Git暂存内容切换分支2.1 问题所示2.2 知识补充 3. Git放弃修改数据3.1 问题所示3.2 知识补充 4. git merge合并查看差异 前言 主要总结工作中的疑惑点&#xff0c;如果你也有相应的场景&am…

跟着cherno手搓游戏引擎【19】抽象纹理

引入&#xff1a; 导入stb_image: GitHub - nothings/stb: stb single-file public domain libraries for C/C 下载复制stb_image.h的内容&#xff08;8000多行&#xff09;&#xff0c;然后粘到如图位置 stb_image.cpp: #include"ytpch.h" #define STB_IMAGE_IM…

【Java】MybatisPlus入门

学习目标 能够基于MyBatisPlus完成标准Dao开发 能够掌握MyBatisPlus的条件查询 能够掌握MyBatisPlus的字段映射与表名映射 能够掌握id生成策略控制 能够理解代码生成器的相关配置 一、MyBatisPlus简介 1. 入门案例 问题导入 MyBatisPlus环境搭建的步骤&#xff1f; 1.1 Sp…

部署实战--修改jar中的文件并重新打包成jar文件

一.jar文件 JAR 文件就是 Java Archive &#xff08; Java 档案文件&#xff09;&#xff0c;它是 Java 的一种文档格式JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中&#xff0c;多出了一个META-INF/MANIFEST.MF 文件META-INF/MANIFEST.MF 文件在生成 JAR 文件的时候…

DPVS 多活部署架构部署

一、目标 利用DPVS部署一个基于OSPF/ECMP的提供HTTP服务的多活高可用的测试环境。 本次部署仅用于验证功能&#xff0c;不提供性能验证。 配置两台DPVS组成集群、两台REAL SERVER提供实际HTTP服务。 注&#xff1a;在虚拟环境里面&#xff0c;通过在一台虚拟服务器上面安装FR…

flinkjar开发 自定义函数

编写自定义加密函数&#xff0c;继承ScalarFunction类&#xff0c;实现eval方法&#xff0c;参数个数类型和返回值根据业务来自定义。 import org.apache.flink.table.functions.ScalarFunction; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax…

ELK集群搭建(基础教程)

ELK集群搭建(基础教程) 目录&#xff1a; 机器准备 集群内各台机器安装Elasticsearch 安装部署Kafka&#xff08;注&#xff1a;每个节点都配置&#xff0c;注意ip不同&#xff09; 安装logstash工具 安装filebeat ELK收集Nginx的json日志 ELK收集Nginx正常日志和错误日…