C++编程(一)C++与C语言的一些区别

文章目录

  • 一、QtCreator基本使用
    • (一)编码格式:
    • (二)C++编程
      • 1. 文件后缀
      • 2. 编译
      • 3. 头文件
  • 二、名字空间
    • (一)概念以及访问方式
      • 1. 概念
      • 2. 访问方式
        • (1)通过作用域限定符进行访问
        • (2)通过名字空间指令进行访问
        • (3)通过名字空间声明进行访问
    • (二)匿名空间
    • (三)名字空间嵌套
  • 三、名字空间总结
      • 1.名字空间的作用:
      • 2.名字空间的访问方式:
      • 3.匿名空间:将全局的变量或者是函数放在匿名空间中;
  • 四、C++中的结构体
    • (一)C语言和C++的不同点
    • (二)枚举和联合体
  • 五、C++中的bool类型
  • 六、C++中的字符串(string)
    • (一)实例化对象
    • (二)运算
      • 1. 字符串拷贝
      • 2. 字符串拼接
    • (三)其他成员方法
      • 1. 计算string类类型的长度
      • 2. 转换成C风格的字符串
  • 七、C++中的函数
    • (一)函数重载(overload)
    • (二)缺省参数(默认参数)
    • (三)哑元参数
    • (四)内联函数(inline)

一、QtCreator基本使用

(一)编码格式:

windows下QtCreator软件默认的编码格式:UTF-8
C++程序使用的编码格式为GBK或者GB2312
qt程序用的编码格式为UTF-8.

(二)C++编程

1. 文件后缀

C++程序一般以.cpp为后缀,也可以是.cc/.cxx/.C

2. 编译

C++程序一般使用g++编译器;
但是依然可以使用gcc编译器:
gcc hello.cpp -lstdc++
g++ hello.cpp -o hello

3. 头文件

  1. 头文件:C++完全兼容C,C++可以使用C的头文件
  2. #include <iostream>
    C++中和I/O相关的类型、对象、函数都在此头文件中
  3. C++中多数头文件没有“.h”后缀,为了与C语言区分开
  4. 头文件所在的系统路径:
    linux下头文件所在的系统路径:/usr/include/c++/编译器版本/..
    在这里插入图片描述

Qt Creator下头文件所在的系统路径:

Qt5.14\Tools\mingw730_64\lib\gcc\x86_64-w64-mingw32\7.3.0\include\c++

在这里插入图片描述

二、名字空间

(一)概念以及访问方式

1. 概念

名字空间又叫命名空间,关键字:namespace

作用
为了避免名字冲突;
为了划分更加精细的逻辑的单元;

格式

namespace 名字空间名{int value; //名字空间中可以有变量int func(){} //名字空间中可以有函数namespace ns{} //名字空间嵌套(使用场景较少)
}
  • 注:
  • 名字空间中可以有变量、函数、名字空间嵌套
  • namespace只起到标识作用;
  • 花括号后面最好不要加分号;

使用示例

#include <iostream>using namespace std;namespace A{int value = 100;void show(){cout << "show函数:value="<<value<<endl;}  //注意,此处无需加分号,加了也没影响namespace B {int value = 200;}
}int main()
{int value = 100;cout << "局部变量优先:value="<<value<<endl;cout << "A:: value="<<A::value<<endl;cout << "B:: value="<<A::B::value<<endl;A::show();return 0;
}

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

2. 访问方式

(1)通过作用域限定符进行访问

格式:
名字空间名::名字空间中的成员

(2)通过名字空间指令进行访问

格式:
using namespace 名字空间名;
从该名字空间指令往后只要使用该名字空间内的成员都不用使用作用域

  • 注意:一般在使用时,
    如果是C++中标准的名字空间,写在程序的开头;
    如果是自定义的名字空间,哪里使用写在哪里。
(3)通过名字空间声明进行访问

格式:
using 名字空间名::名字空间中的成员;
从该名字空间指令往后只要使用该名字空间内的此成员都不用使用作用域

  • 注:如果函数中已经有同名的局部变量,此时再使用名字空间声明,会冲突

(二)匿名空间

g++编译器会将全局的变量或者全局的函数放在匿名空间中
局部优先原则

通过作用域限定符进行访问:
::匿名空间中的成员

(三)名字空间嵌套

  1. 通过作用域限定符进行访问
  2. 通过别名的方式进行访问
namespace C = A::B;
cout << "C:: value="<<C::value<<endl;

三、名字空间总结

1.名字空间的作用:

防止名字冲突,划分更加精细的逻辑单元;

2.名字空间的访问方式:

通过作用域限定符进行访问;
通过名字空间指令进行访问;
通过名字空间声明进行访问;

3.匿名空间:将全局的变量或者是函数放在匿名空间中;

访问匿名空间中的成员和局部域中的成员采用的是局部优先原则
优先在局部域里找变量或者函数,局部域没有再去全局域。

四、C++中的结构体

C++中的结构体是完全兼容C语言的结构体的

(一)C语言和C++的不同点

  1. C语言定义结构体不能省略struct关键字;
    C++定义时可以省略struct关键字
  2. C语言中,结构体中不可以定义函数;
    C++语言中结构体可以定义函数
    注:结构体中定义函数但是不属于结构体,不占结构体大小,属于全局域
  3. C++语言中访问结构体成员:
    通过“.
    通过“->”访问

(二)枚举和联合体

在C++中枚举和联合体的关键字也可以省略

五、C++中的bool类型

C语言中想要使用bool类型,需要添加头文件;

C++中bool作为基本类型,可以直接使用true或者false

bool占一个字节
因为内存中最小单位是字节,bool类型占一个字节,但是只需要一个bit位

count << boolalpha;
boolalpha可以让bool可以更加明显的显示
count << noboolalpha; //取消显示
不管是什么类型的值赋值给bool类型变量,都会隐式类型转换成bool类型。

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

六、C++中的字符串(string)

C++中的字符串兼容C语言中的字符串
string是类类型;

(一)实例化对象

访问类中的成员

(二)运算

string类类型可以直接做运算操作,因为其内部实现了运算符的重载

1. 字符串拷贝

2. 字符串拼接

(三)其他成员方法

1. 计算string类类型的长度

int size()
int length()

2. 转换成C风格的字符串

  • 注:cin打印字符串不计算空格
    可以使用getline(cin,str1);
  • 最好加上头文件#include <string>

七、C++中的函数

C++中函数可以重载;
C++中函数可以有缺省参数;
C++中可以有哑元参数;

(一)函数重载(overload)

相同的函数名,相同的作用域,不同的参数就可以构成重载关系。
同名不同参(参数的个数或者数据类型不同)
跟返回值无关

调用会根据传入的实参进行选择对应的函数进行调用

重载的机制:
只是在代码层面上看到的函数的名字是一样的,但是编译时g++编译器会对函数名重新定义,之后函数名就不同了。

(二)缺省参数(默认参数)

在函数定义时可以对参数进行赋值操作

  1. 缺省值赋值遵循靠右原则
    如果一个函数有多个参数,应当将带有缺省值的参数放置在函数声明的最右侧。
  2. 有实参优先选择实参;没有实参才会选择默认参数。

函数声明和函数定义不能同时加缺省参数;
加到函数定义不行,必须加到函数声明的位置,因为程序在编译时先看到函数的声明。

(三)哑元参数

在形参表中只有数据类型,没有参数名,这样的参数叫做哑元参数。

使用场景:
自增自减运算符重载时,必须使用哑元参数,此时哑元参数用来占位置,来区分是前自增/自减,还是后自增/自减
开发时用于代码升级

(四)内联函数(inline)

内联函数是一个真正的函数,具有普通函数所有的属性和行为
内联函数就是在普通函数前面加上inline关键字

格式:
inline 返回值类型 函数名(){}

编译器建议内联函数在编译阶段展开,节省函数跳转的开销;
内联函数到底展不展开是由编译器的算法来决定

内联函数一般在函数体较小,逻辑比较单一,调用很频繁的场景。

  • 注:内联函数与带参宏有什么区别

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

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

相关文章

数据挖掘常见算法(聚类)

划分方法 K-均值算法(K-means算法) 方法: 首先选择K个随机的点,称为聚类中心.对于数据集中的,每一个数据,按照距离K个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类.计算每一个组的平均值,将改组所关联的中心点移动到平均值的位置重复2~…

波士顿大学开发通过患者的声音检测早期阿尔茨海默氏症迹象的AI系统

波士顿大学的研究人员开发了一种人工智能系统&#xff0c;能够通过患者的声音检测阿尔茨海默病的早期迹象。目前尚无治愈这种疾病的方法&#xff0c;但及早发现可以改善患者的治疗选择。研究人员结合自然语言处理和机器学习&#xff0c;开发了一种可以自动预测患者阿尔茨海默病…

RocketMq源码解析九:刷盘机制及过期文件删除

一、刷盘机制 刷盘策略在不同时间进行刷写磁盘。RocketMQ的存储是基于JDK NIO的内存映射机制(MappedByteBuffer)的,消息存储首先将消息追加到内存,再根据配置的刷写磁盘 同步刷盘表示消息追加到内存后,立即将数据刷写到文件系统中。代码的调用链如下: submi…

新手必备!短视频剪辑常用的18个技巧——剪映篇

导入素材&#xff1a;这里我们可以选择自己拍摄好的素材&#xff08;图片、视频或录制好的音频&#xff09;&#xff0c;按照顺序导入剪辑区剪辑。这一步是剪辑的基础&#xff0c;确定剪辑的大体思路与成片框架&#xff01;别忽略了&#xff0c;剪映官方素材库提供的素材&#…

【数学建模】—【Python库】—【Numpy】—【学习】

目录 ​编辑 1. NumPy安装 2. ndarray对象 1. 创建ndarray 1.从列表或元组创建&#xff1a; 2.使用内置函数创建&#xff1a; 2. ndarray属性 3. 数组运算 1. 基本运算 2. 数学函数 3.统计函数 4. 数组索引与切片 1. 一维数组索引与切片 2.多维数组索引与切片 5.…

免费直播课程!6月30日

<面向人工智能领域的开发工程师&#xff0c;特别是机器学习/深度学习方向> 在这里报名听课&#xff1a; F学社-全球FPGA技术提升平台 (zzfpga.com) TIPS&#xff1a; 报名后将在页面内弹出「腾讯会议号和会议密码」&#xff0c;注意复制保存哦~

python笔记----少儿编程课程

第1课&#xff1a; 认识新朋友-python 知识点&#xff1a; 1、在英文状态下编写Python语句。 2、内置函数print()将结果输出到标准的控制台上&#xff0c;它的基本语法格式如下&#xff1a; print("即将输出的内容") #输出的内容要用引号引起来&#xff0c;可…

Jmeter插件管理器,websocket协议,Jmeter连接数据库,测试报告的查看

目录 1、Jmeter插件管理器 1、Jmeter插件管理器用处&#xff1a;Jmeter发展并产生大量优秀的插件&#xff0c;比如取样器、性能监控的插件工具等。但要安装这些优秀的插件&#xff0c;需要先安装插件管理器。 2、插件的下载&#xff0c;从Availabale Plugins中选择&#xff…

android Studio 无线开发调试: PC机远程安卓电脑 免费

背景 公司的安卓机比较大&#xff0c;还有连接着串口设备不好挪动。 但是遇到问题调试很麻烦。想找到一套远程调试方法。 实现 要求&#xff1a; adb android Studio 2023.3.1 安卓机IP:1928.168.1.228 直接用adb远程连接&#xff1a;adb connect 1928.168.1.228 默认端口…

Kotlin 中的数据类型有隐式转换吗?

在 Kotlin 中&#xff0c;数据类型不可隐式转换。在 Java 中&#xff0c;如果数据是从小到大&#xff0c;是可以隐式转换的&#xff0c;数据类型将自动提升。 下面以 int 类型的数据为例&#xff0c;在 Java 中这样写是可以的&#xff1a; int a 2312; long b a;但是在 Kot…

ONLYOFFICE8.1-------宝藏级别桌面编辑器测评

简介 ONLYOFFICE 8.1 是一个功能强大的办公套件&#xff0c;提供了一系列广泛的功能&#xff0c;用于文档管理、协作和沟通。它包括用于创建和编辑文本文档、电子表格、演示文稿等的工具。ONLYOFFICE 8.1 的一些关键特性包括&#xff1a; 1. 协作&#xff1a;ONLYOFFICE 8.1 允…

[数据结构】——七种常见排序

文章目录 前言 一.冒泡排序二.选择排序三.插入排序四.希尔排序五.堆排序六.快速排序hoare挖坑法前后指针快排递归实现&#xff1a;快排非递归实现&#xff1a; 七、归并排序归并递归实现&#xff1a;归并非递归实现&#xff1a; 八、各个排序的对比图 前言 排序&#xff1a;所谓…

小程序发布必须进行软件测试吗?测试内容有哪些?

在如今移动互联网时代&#xff0c;小程序已成为许多企业广泛采用的一种营销手段&#xff0c;然而&#xff0c;发布小程序之前进行充分的软件测试是至关重要的&#xff0c;因为它不仅可以确保小程序的质量&#xff0c;还可以避免潜在的风险和损失。 在进行小程序发布前进行软件…

UniApp 开发微信小程序教程(一):准备工作和环境搭建,项目结构和配置

文章目录 一、准备工作和环境搭建1. 安装 HBuilderX步骤&#xff1a; 2. 注册微信开发者账号步骤&#xff1a; 3. 创建 UniApp 项目步骤&#xff1a; 二、项目结构和配置1. UniApp 项目结构2. 配置微信小程序修改 manifest.json修改 pages.json 3. 添加首页文件index.vue 示例&…

linux rocky9.2系统搭建sqle数据库审核平台

文章目录 前言一、环境准备?二、开始部署前言 关于SQLE SQLE 是由上海爱可生信息技术股份有限公司 开发并开源,支持SQL审核、索引优化、事前审核、事后审核、支持标准化上线流程、原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。 产品特色 支持通过插件的形式扩展…

14-6 小型语言模型在商业应用中的使用指南

人工智能 (AI) 在商业领域的发展使众多工具和技术成为人们关注的焦点&#xff0c;其中之一就是语言模型。这些大小和复杂程度各异的模型为增强业务运营、客户互动和内容生成开辟了新途径。本指南重点介绍小型语言模型、它们的优势、实际用例以及企业如何有效利用它们。 基础知识…

2小时动手学习扩散模型(pytorch版)【入门版】【代码讲解】

2小时动手学习扩散模型&#xff08;pytorch版&#xff09; 课程地址 2小时动手学习扩散模型&#xff08;pytorch版&#xff09; 课程目标 给零基础同学快速了解扩散模型的核心模块&#xff0c;有个整体框架的理解。知道扩散模型的改进和设计的核心模块。 课程特色&#xf…

边缘计算VNC智能盒子如何助力HMI设备实现二次开发?

HMI&#xff08;Human-Machine Interface&#xff09;又称人机界面&#xff0c;是用户与机器之间交互和通信的媒介。今天带你了解智能盒子如何助力HMI设备实现二次开发&#xff1f; HMI设备被广泛应用在工业自动化中&#xff0c;具有显示设备信息&#xff0c;实时监测&#xf…

Dev++软件连接Sqlite

Dev中的C语言使用连接sqlite数据库 1.下载sqlite3.dll和sqlite3.h sqlite3.dll类似于.c文件&#xff0c;封装了函数的原型。 sqlite3.h库文件声明函数。 官网地址下载&#xff1a;sqlite sqlite-amalgamation-3460000.zipsqlite-dll-win-x64-3460000.zip 2.新建c项目 1. …

CSS|05 继承性与优先级

继承性 一、继承性的特点&#xff1a; 1.外层元素身上的样式会被内层元素所继承 2.如果内层元素与外层元素身上的演示相同时&#xff0c;外层元素的样式会被内层元素所覆盖 二、关于继承性的问题 是不是所有样式都能被继承&#xff1f; 答&#xff1a;并不是所有样式能被继承…