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

news2024/9/21 14:28:47

文章目录

  • 一、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.coloradmin.cn/o/1872450.html

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

相关文章

如何看待AIGC中漫画版权争议?( 计育韬老师高校公益巡讲答疑实录2024)

这是计育韬老师第 8 次开展面向全国高校的新媒体技术公益巡讲活动了。而在每场讲座尾声&#xff0c;互动答疑环节往往反映了高校师生当前最普遍的运营困境&#xff0c;特此计老师在现场即兴答疑之外&#xff0c;会尽量选择有较高价值的提问进行文字答疑梳理。 *本轮巡讲主题除了…

QT拖放事件之五:自定义拖放操作-拖动中的修饰符操作

1、效果 2、代码 #include "SelfButton.h" #include <QApplication>SelfButton::SelfButton(QString str ,QWidget* parent):Q

嵌入式Linux系统编程 — 4.3 strcat、strcpy函数拼接与复制字符串

目录 1 字符串拼接 1.1 strcat函数 1.2 strncat函数 1.3 示例程序 2 字符串复制 2.1 strcpy函数 2.2 strncpy函数 2.3 示例程序 1 字符串拼接 1.1 strcat函数 在Linux系统中&#xff0c;strcat 函数是C语言标准库中的一个函数&#xff0c;用于将一个字符串追加到另一…

深度解析百数多标签技术:让数据处理更加精准与高效

百数的多标签功能允许用户在单个表单或应用中创建多个独立的标签页&#xff0c;每个标签页可以包含不同的字段和数据。这有助于清晰组织和管理表单内容&#xff0c;使数据结构更加分明。用户可以根据需要添加、删除或重新排序标签&#xff0c;轻松管理复杂数据&#xff0c;提高…

Kafka入门到精通(三)-Kafka

Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。 这种动作&#xff08;网页浏览&#xff0c;搜索和其他用户的行动&#xf…

Kali系统的中英文切换

执行命令&#xff1a;sudo dpkg-reconfigure locales 命令作用&#xff1a;重新生成locales配置文件并允许你重新选择所需的语言环境。 中文&#xff1a;zh_CN.UTF-8 UTF-8 英文&#xff1a;en_US.UTF-8 UTF-8 用空格键选中和取消选项。 要设置成中文&#xff1a;取消选择en…

我教会了我妈搭建自己的 AI 聊天机器人...

在这个人工智能爆发的年代,ChatGPT、Claude、Kimi、文心一言等 AI 大模型产品火遍全网,仿佛一夜之间,人人都在谈论 AI。 作为普通人的我们,难道就只能看着程序员们尽情玩耍,自己却无法参与其中吗?NO! 鉴于最近自己社群学员和粉丝的要求&#xff0c;一进来大家无论是不是小白…

springboot的特点是什么?

Spring Boot是一个基于Spring框架的开源项目&#xff0c;它旨在简化Spring应用的初始搭建和开发过程。以下是Spring Boot的一些主要特点&#xff1a; 快速开发&#xff1a; Spring Boot提供了许多默认配置&#xff0c;使得开发者可以更快地开始开发应用程序&#xff0c;而无需…

Centos+Jenkins+Maven+Git 将生成的JAR部署到Jenkins服务器上

背景:前一篇写的是Jenkins和项目应用服务器不在同一个服务器上。但是有的公司可能不会给Jenkins单独弄一个服务器。可能就会出现Jenkins就搭建在某一个应用服务器上。这种情况的参考如下的操作。 1、登录 没有安装的参考下面的安装步骤先安装: Jenkins安装手册 输入账号、…

PT100(RTD)是什么?2线,3线,4线原理

RTDs - or Resistance Temperature Detectors- (电阻式温度探测器)&#xff0c;是温度型传感器&#xff0c;包含一个电阻&#xff0c;这个阻值可以随温度的变化而变化。在工业的进程中和实验室里已经使用了很多年&#xff0c;以精确&#xff0c;可靠和稳定的特性。 2线制 2线制…

linux的常用系统维护命令

1.ps显示某个时间点的程序运行情况 -a &#xff1a;显示所有用户的进程 -u &#xff1a;显示用户名和启动时间 -x &#xff1a;显示 没有控制终端的进程 -e &#xff1a;显示所有进程&#xff0c;包括没有控制终端的进程 -l &#xff1a;长格式显示 -w &#xff1a;宽…

聊一聊 C# 弱引用 底层是怎么玩的

一&#xff1a;背景 1. 讲故事 最近在分析dump时&#xff0c;发现有程序的卡死和WeakReference有关&#xff0c;在以前只知道怎么用&#xff0c;但不清楚底层逻辑走向是什么样的&#xff0c;借着这个dump的契机来简单研究下。 二&#xff1a;弱引用的玩法 1. 一些基础概念 …

主播美颜工具开发全攻略:美颜SDK从基础到进阶的技术指南

今天&#xff0c;笔者将为你详细介绍美颜SDK的基础知识以及如何进行进阶开发。 一、美颜SDK基础知识 什么是美颜SDK&#xff1f; 美颜SDK是一种软件开发工具包&#xff0c;包含了一系列用于图像处理的算法和功能&#xff0c;主要用于实时视频处理和图像优化。开发者可以将美…

计算机基础——经典排序算法总结2

直接插入排序的过程&#xff1a;先将序列第一个记录暂时作为有序子序列&#xff0c;从第二个开始逐个进行插入&#xff0c;直至整个序列有序。一趟排序将elem[i]插入到已排好序elem[0…i-1]中各元素做比较后的任何对应位置&#xff0c;所以未必能选出一个元素放在其最终位置上。…

自定义 vant 的 van-calendar 日历控件

最近在做 vue 微信公众号项目&#xff0c; 有个自定义日历控件展示的需求&#xff0c;经过查阅资料&#xff0c;最终实现了如图所示效果&#xff0c;这里做了总结&#xff0c;需要的小伙伴可以参考一下&#xff1a; HTML代码&#xff1a; <template><div class"…

YOLOv10(7):YOLOv10训练(以训练VOC数据集为例)

YOLOv10&#xff08;1&#xff09;&#xff1a;初探&#xff0c;训练自己的数据_yolov10 训练-CSDN博客 YOLOv10&#xff08;2&#xff09;&#xff1a;网络结构及其检测模型代码部分阅读_yolov10网络结构图-CSDN博客 YOLOv10&#xff08;4&#xff09;&#xff1a;损失&…

每日一题——Python实现蓝桥杯1. 坤坤的破译任务(举一反三+思想解读+逐步优化)三千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 时间复杂度&#xff1a; 空间复杂度&#xff1a; 我要更强 时间复杂度分析…

Flutter循序渐进==>与基金mysql数据库交互

导言 债基基金的注意事项&#xff0c;别看收益不高&#xff0c;注意事项可真不少。最近买了CS一支基金&#xff0c;三周时间就亏掉两三个点&#xff08;水平全网最差、赎回费和管理费全网最高&#xff09;。就是冲着它的历史成绩去的&#xff0c;突然发现已经换了基金经理&…

向日葵API集成服务:三大优势助力企业搭建专属远控方案

为了方便企业用户更加灵活的搭建满足各自需求的软件解决方案&#xff0c;降低开发和部署门槛&#xff0c;很多软件方案供应商提供了多样化的合作模式。 以贝锐向日葵远程控制为例&#xff0c;他们就向客户提供了基础的SaaS服务模式、私有化部署模式、SDK嵌入模式&#xff0c;以…

第二证券:近300亿资金抄底,低估值+高增长“错杀”股名单来了,仅11只

成绩表现优质公司或存在“错杀”的状况。 头部宽基ETF成交额继续放量&#xff0c;近300亿资金抄底 6月21日&#xff0c;上证指数跌破3000点后&#xff0c;商场谨慎情绪延伸&#xff0c;成交量继续走低&#xff0c;本周4个交易日均缺乏7000亿元。 关于3000点以下的地量行情&a…