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

文章目录

  • 一、QtCreator基本使用
    • (一)编码格式:
    • (二)C++编程
      • 1. 文件后缀
      • 2. 编译
      • 3. 头文件
  • 二、名字空间
    • (一)概念以及访问方式
      • 1. 概念
      • 2. 访问方式
        • (1)通过作用域限定符进行访问
        • (2)通过名字空间指令进行访问
        • (3)通过名字空间声明进行访问
    • (二)匿名空间
    • (三)名字空间嵌套
  • 三、名字空间总结
      • 1.名字空间的作用:
      • 2.名字空间的访问方式:
      • 3.匿名空间:将全局的变量或者是函数放在匿名空间中;
  • 四、C++中的结构体
    • (一)C语言和C++的不同点
  • 五、C++中的bool类型
  • 六、C++中的字符串(string)
  • 七、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++的不同点

  1. C语言定义结构体不能省略struct关键字;
    C++定义时可以省略struct关键字
  2. C语言中,结构体中不可以定义函数;
    C++语言中结构体可以定义函数
    注:结构体中定义函数但是不属于结构体,不占结构体大小,属于全局域
  3. 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语言中的字符串

cin打印字符串不计算空格
getline(cin,str1);

七、C++中的函数

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

(一)函数重载(overload)

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

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

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

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

在函数定义时可以对参数进行赋值操作
缺省值赋值遵循靠右原则
如果一个函数有多个参数,应当将带有缺省值的参数放置在函数声明的最右侧。

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

(三)哑元参数

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

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

(四)内联函数(inline)

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

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

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

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

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

相关文章

手写方法实现字符串例如:“123“与整型例如:123相互转化(面试必会)

目录 二、字符串类型转化为整型 1. 初始化变量 2.定义字符串索引值 3.思考如何将字符1转化为数字1 4. 转化思路 5.考虑字符串转化负数例&#xff1a;-123456 6.完整代码 四、最后 一、前言 在c语言和c中&#xff0c;有许许多多的数据类型相互转化的方法&#xff0c;这里…

【面试题】面试小技巧:如果有人问你 xxx 技术是什么?_面试问你对什么技术特别了解

前端工程越来越大&#xff0c;前面几种方案不能很好的支持单元测试。 在这样的背景下&#xff0c;React 诞生了。React 带来了新的思维模式&#xff0c;UI fn(props)&#xff0c;React 中一个组件就是一个函数或者一个类&#xff0c;一个函数或者一个类就是一个基础单位&…

msvcp120.dll丢失的解决方法,总结几种有效的解决方法

最近&#xff0c;我在使用计算机时遇到了一个问题&#xff0c;系统提示我丢失了msvcp120.dll文件。这让我感到非常困扰&#xff0c;因为这个问题导致我无法正常运行一些程序。经过一番搜索和尝试&#xff0c;我找到了几种修复这个问题的方法&#xff0c;并成功解决了这个问题。…

WebSocket服务和客户端测试

一、介绍 C开发服务端&#xff0c;使用websocketpp库(0.8.2)&#xff0c;直接加载头文件即可&#xff0c;下载地址&#xff1a;https://github.com/zaphoyd/websocketpp.git 依赖boost库、openssl库 JavaScript开发客户端该测试例子支持websocket ws和websocket wss协议 二、…

深入理解 JavaScript Promise

引言 在当今的 JavaScript 开发中&#xff0c;异步编程已经成为了标准实践。随着我们的应用程序变得越来越复杂&#xff0c;管理异步操作和回调变得尤为关键。在过去&#xff0c;开发者们常常发现自己陷入所谓的“回调地狱”&#xff0c;这是一种由于深层嵌套的回调函数导致的…

三人同行乐享模式:社交电商的新趋势

在数字化时代&#xff0c;社交电商正以其独特的优势崭露头角。其中&#xff0c;“三人同行乐享模式”就是一种创新的购物激励机制&#xff0c;它通过消费者的社交互动和分享&#xff0c;不仅促进了产品的销售&#xff0c;更加强了品牌的推广和影响力。 一、模式简介 此模式的核…

RockChip Android12 Settings二级菜单

一:概述 本文将针对Android12 Settings的二级菜单System进行说明。 二:System 1、Activity packages/apps/Settings/AndroidManifest.xml <activityandroid:name=".Settings$SystemDashboardActivity"android:label="@string/header_category_system&quo…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-30Kaggle竞赛:图片分类

30Kaggle竞赛&#xff1a;图片分类 比赛链接&#xff1a; https://www.kaggle.com/c/classify-leaves 导入包 import torch import torchvision from torch.utils.data import Dataset, DataLoader from torchvision import transforms import numpy as np import pandas as…

【消息队列】六万字长文详细带你RabbitMQ从入门到精通

目录 1、基础篇1.1 为什么要用消息队列MQ1.2 什么是消息队列&#xff1f;1.3 RabbitMQ体系结构介绍1.4 RabbitMQ安装1.5 Hello World1.5.1 目标1.5.2 具体操作 1.6 RabbitMQ用法1.6.1 Work Queues1.6.2 Publish/Subscribe1.6.3 Routing1.6.4 Topics1.6.5 工作模式小结 2. 进阶篇…

推荐三款必备软件,个个五星好评,你一定不要错过

WiseCare365 WiseCare365是一款由WiseCleaner推出的综合性Windows系统优化和加速工具。它集成了多种功能&#xff0c;旨在帮助用户清理、优化和维护电脑系统&#xff0c;提升电脑性能和安全性。 WiseCare365的主要功能包括&#xff1a; 系统清理&#xff1a;它可以清理各种缓存…

Java.io包:从基础到高级的全面指南

Java.io包是Java编程语言中用于处理输入和输出的核心库之一。它提供了一系列类和接口&#xff0c;用于与文件、流、输入输出等进行交互。Java.io的设计目的是为了提供一个简单且一致的API&#xff0c;使得开发者能够轻松地处理各种输入输出操作&#xff0c;无论是文件读写、网络…

CSC公派|哲学老师赴英国红砖大学访学交流

T老师申报CSC公派访问学者&#xff0c;要求世界排名Top200的英国大学。我们在一个月内先后获得了利物浦大学和兰卡斯特大学的邀请函&#xff0c;这两所高校均位列Top200。最终T老师选择英国红砖高校之一的利物浦大学并申报成功顺利出国。 T老师背景&#xff1a; 申请类型&…

AutoTokenizer.from_pretrained报错TypeError: expected string or bytes-like object

问题 tokenizer AutoTokenizer.from_pretrained(distilbert-base-uncased)在用HuggingFace的Transformers加载分词器的时候报错&#xff0c;代码如下: > load tokenizer model distilbert Traceback (most recent call last):File "E:\PythonProjects\Sentiment_Ana…

Vue父组件mounted执行完后再执行子组件mounted

// 创建地图实例 this.map new BMap.Map(‘map’) } } ... 现在这样可能会报错&#xff0c;因为父组件中的 map 还没创建成功。必须确保父组件的 map 创建完成&#xff0c;才能使用 this.$parent.map 的方法。 那么&#xff0c;现在的问题是&#xff1a;如何保证父组件 mo…

端到端的全人体关键点检测:手把手实现从YOLOPose到YOLOWhole

目录 一、搭建yolopose平台二、迁移训练任务2.1 任务拓展数据准备训练模型测试训练模型结论To-do list: 1、数据集,COCO-whole, Halpe;下载好; 2、模型搭建,先基于yolov8来检测人体姿态,17个点; 3、迁移任务,17个点,把它拓展到133个点; 4、优化133个点的模型; 一、搭…

深入理解RLHF技术

在《LLM对齐“3H原则”》这篇文章中&#xff0c;我们介绍了LLM与人类对齐的“3H”原则&#xff0c;但是这些对齐标准主要是基于人类认知进行设计的&#xff0c;具有一定的主观性。因此&#xff0c;直接通过优化目标来建模这些对齐标准较为困难。本文将介绍基于人类反馈的强化学…

ONLYOFFICE 8.1:全面升级,PDF编辑与本地化加强版

目录 &#x1f4d8; 前言 &#x1f4df; 一、什么是 ONLYOFFICE 桌面编辑器&#xff1f; &#x1f4df; 二、ONLYOFFICE 8.1版本新增了那些特别的实用模块&#xff1f; 2.1. 轻松编辑器 PDF 文件 2.2. 用幻灯片版式快速修改幻灯片 2.3. 无缝切换文档编辑、审阅和查…

RS-485和RS-422通信的3.3V低功耗收发器MAX3483

描述 国产MAX3485外观和丝印 该MAX3483ESA为15kV ESD保护、3.3V、低功耗收发器&#xff0c;用于RS-485和RS-422通信。 每个设备包含一个驱动器和一个接收器。 该MAX3483ESA具有压摆率限制驱动器&#xff0c;可最大限度地降低 EMI 并减少因端接不当电缆引起的反射&#xff0c;从…

system verilog 学习1

1 数据类型 sv 引进了一些新的数据类型&#xff0c;它们具有以下优点 &#xff08;1&#xff09;双状态数据类型&#xff1a;更好的性能&#xff0c;更低的内存消耗 &#xff08;2&#xff09;队列、动态和关联数组&#xff1a;减少内存消耗&#xff0c;自带搜索和分类功能 &a…

C# 使用Vector256写了一个简单的帮助类Vector256Helper

当数据量大的时候用普通代码计算非常耗时&#xff0c;这里简单利用simd加速处理 internal unsafe class Vector256Helper{/// <summary>/// 统计元素个数/// </summary>/// <param name"array"></param>/// <param name"elementToCo…