从C语言到C++的进阶之C++的非类新特性(篇三)

<Zhuuu_ZZ>HIVE(十一)函数 Hive内置函数一 Hive函数分类二 字符函数二 类型转换函数和数学函数三 日期函数四 集合函数五 条件函数六 聚合函数和表生成函数6.1 聚合函数6.2 表生成函数:输出可以作为表使用 一 Hive函数分类 从输入输出角度分类 标准函数:一行数据中的一列或多列为输入,结果为单一值 聚合函数:多行的零列到多列为输入,结果为单一值 表生成函数:零个或多个输入,结果为多列或多行 从实现方式分类 内置函数 自定义函数 UDF:自定义标准函数 UDAF:自定义聚合函数 UDTF:自定义表生成函数 阅读详情

1、从宏到内联函数

(1)写一个返回最大值的宏定义(C语言)

#include <stdio.h>
#define BIG(a,b) (a>b?a:b)

void main()
{
	printf("大值是:%d",BIG(10,55));
}

(2)引入内联函数(C++)
宏定义有些硬伤,那就是它所做的就是简单的文字替换,不太适合大规模的程序使用。

而且,它不会判断类型,传入什么值就是什么值,不会对类型进行判断,不小心的话可能因为运算符的优先级次序,把传递进去的参数弄乱,因此往往需要自己判断好类型然后加上对应的的括号才能预防传参出错的问题。

C++的内联函数(inline function)正是用来解决此类问题而出现的,基本上可以把内联函数堪称“单纯的替代”同时C++提供了内联函数的“参数检验”的功能。
比如上述的C语言的宏定义:#define BIG(a,b) (a>b?a:b)可以C++中的改成:

inline int BIG(int a, int b)
{
	return a>b?a:b;
}

2、函数参数的缺省值

在C++中,可以给 函数参数设定缺省值,也就是该参数的默认值。
有了缺省值后,就可以不传入该缺省参数,当然如果有需要,也可以传入,则该缺省值就会被替换掉。

#include <iostream>
using namespace std;

int mul(int a, int b=10)
{
	return a*b;
}

int main(int argc, char* argv[])
{
	int x;
	cout << "请输入需要处理的数字(整数):" << endl;
	cin >> x;
	cout << "用缺省值做参数b的结果:" << mul(x) << endl;
	cout << "用本身做参数b的结果:" << mul(x, x) << endl;
}

07
注意:缺省值需要往后放,必须跟在其他必须传入的参数后面。

3、C++的常量与引用

(1)常量类型
在C++中,我们可以使用const关键字来定义常量,常量是不能更改和重新赋值的。

const int AA= 520;

(2)常量与引用

const int A;
const int &B= A;  //引用类型B引用常量A

也就说明,常量引用可以引用常量。不过,不能用常量来初始化一个非常量类型,因为这相当于间接改变变量。

4、函数重载

(1)所谓重载就是:不同函数使用同一个函数名。
之所以需要重载,是为了解决“只因函数参数的数据类型不一样,即必须设计算法完全县共同的但函数名不同的多个函数”的缺憾。

有了函数重载,我们可以定义多个同名不同类型的函数,而且不用管对哪一种数据类型进行处理,都只要调用该类型名进行传参就行了。

(2)使用函数重载
比如我们可以定义以下4个同名函数:

int AA(int N);
float AA(float N);
double AA(double N);
long AA(long N);

使用它们时则是如此:

int a= AA(234);
float b= AA(3.14);
double c= AA(-3.141592653);
long d= AA(4L);

由上可以知道,重载函数可以返回不同类型的值。
注意点:两个重载函数的参数个数不同;一个和多个参数类型不同。

5、new运算和delete运算

(1)C++提供的new和delete运算是在堆(heap)中分配和删除存储块的。
使用new运算必须指明数据类型,由new分配足够多的内存块,并且返回该存储块的首地址作为指向该指定类型的指针。

#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
	int *p;
	p= new int; 
	*p= 2020;
	cout << *p;
	delete p; 
}

此处的p= new int 表示动态分配一个int类型的存储区,并且将首地址赋值给指针p;
最后的delete p表示释放指针p所指向的存储空间,也就是前面分配的int存储区。

(2)使用new分配存储区的注意点

  • new可以自动计算它要分配的存储空间的大小,因而可以为更加复杂的数据进行空间分配。比如int *p= new int[10];
  • 多维数组分配空间时,每一维的界值大小都不能忽略,便于进行存储空间的计算。比如int *p= new int[2][3][4];
  • 分配空间时可以初始化,比如int *p= new int(123);,表示的就是为指针p分配一块int存储区,并且将该存储区初始化为123。
  • delete释放空间时可以不指定空间大小:delete []p;,中括号[]在p的前面。
【C语言总结篇】新起点 写了这么久的博客,来一个简单的自我介绍: 本人是上海师范大学的一名计科专业的大一新生,暑假时通过网上的各类资源也记录下了不少的文章,从高中开始就对编程有产生浓厚的兴趣,我知道在这方面想要有一定造诣前方定会艰难重重,但我对自己抱有足够的信心,我认为:有志者,事竟成。 我的编程目标: 学习好C/C++,Linux环境平台,计算机网络,数据库等……,希望能在大三的实习/校招时取得一份令我满意的offer。 我的学习思路: 1、在大一时学好C/C++,不仅仅是学完(学扎实,弄清楚); 大二学习STL、L 阅读详情

相关推荐

C++——进阶之路

我一直想是不是拜师,学学艺。有着大佬的庇佑,那岂不是轻车熟路,畅通无阻。后来,我又想了想。完全不用!按如今的环境,以及各种情况,综合因素,不可抗力,等等数不清的原因——不可能。 那么,究竟该如何在C++的道路上进阶。如果你是从娘胎里就开始编程的,有着这一个会编程的爹。那真是——如获至宝(苦命的孩子)。那么,我们半路出身的,野生的,该如何学习。又没有这么厉害的爹,考上大学都已经是自求多福了。选了计算机专业,希望以后出来能挣大钱。结果却是没日没夜的996。说了这么多,你还教人家...

qq_36912885的博客 2868

concat 不是可以识别的 内置函数名称。_Pandas Dataframe操作concat、join、merge

concatconcat函数是在pandas底下的方法,可以将数据根据不同的轴作简单的融合pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False)参数说明: objs: ser...

weixin_33632298的博客 1822

C++ 新特性 | C++20 常用新特性介绍

本文详细介绍C++20的常用新特性。

dvlinker的技术专栏 6424

CONCAT不是可以识别的内置函数名称。

今天发布程式到正式环境后,系统报错了,log的错误信息如下: System.Data.SqlClient.SqlException (0x80131904): 'CONCAT' 不是可以识别的 内置函数名称。 在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnectio...

Welcome 2万+

BugkuCTF-PWN题pwn2-overflow超详细讲解

解题思路 1)计算出get_shell_的地址偏移量 2)算出来之后就直接溢出到后门函数 知识点 x64函数调用规则 解题之前我们先学下linux x64的函数调用规则。 x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h

am_03的博客 3013

从零开始解析N-CMAPSS数据集:航空发动机健康管理的入门指南

本文详细解析了N-CMAPSS数据集在航空发动机健康管理中的应用,从数据集的构成、关键变量到实际数据分析方法,为初学者提供了全面的入门指南。通过Python代码示例,展示了如何加载、探索和建模这一复杂数据集,帮助读者掌握航空发动机性能预测的核心技术。

weixin_29063979的博客 323

SqlServer CONCAT不是可以识别的内置函数名称。

在SqlServer2012新增的Concat函数,由于本地数据库是SQLServer2016版本所以没问题,而正式环境是SqlServer2000。

SJ15630070060的博客 3991

东华大学oj系统 39 最大乘积

39 最大乘积 作者: Turbo时间限制: 1S章节: 深度优先搜索 问题描述 : 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? 输入说明 : 第一行一个数表示数据组数   每组输入数据共2行:   第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15,   第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。 输出说明 : 每组数据输出1行,为最大的乘积。 输入范例 : 1 5 5 1 2 3 4 2 输出范例 : 48 注:难

weixin_50336369的博客 528

JavaScript学习笔记4

1.函数及其基本语法 <script type="text/javascript"> //自定义函数1:无返回值 function func1(){ alert("用户名长度大于5"); } //自定义寒素2:有返回值,无参数 function func2(){ return 123; } //自定义寒素3:有返回值,参数 function func3(num1,num2){ return num1+num2; } //自定义寒素4:函数

weixin_38720471的博客 267

Allegro 16.6 高级技巧实战:用Region规则和动态间距搞定高密度连接器布局布线

本文深入探讨了Allegro 16.6在高密度连接器布局布线中的高级技巧,重点介绍了Region规则和动态间距属性的应用。通过局部规则覆盖和分层控制,解决0.5mm以下引脚间距的布线难题,提升PCB设计效率和质量。

weixin_30352645的博客 440

基于CrossSim的存储硬件原型机ANN仿真:MNIST手写数字识别实现与分析

本项目基于CrossSim仿真平台,在存储硬件原型机上实现了MNIST手写数字识别的ANN模型。通过搭建CrossSim仿真环境,设计传统ANN基准模型和考虑硬件非理想特性的CrossSim模型,对比分析了不同配置下的识别性能。实验结果表明,在引入硬件噪声和器件变异的情况下,模型准确率仍能达到95%以上,验证了存储内计算架构的可行性。研究为存储硬件与计算单元融合提供了实验依据,展示了CrossSim在神经形态计算系统仿真中的实用价值。

huanghm88的专栏 596

C语言和C++有什么区别?

这个问题最权威的回答看看C++语言之父Bjarne Stroustrup是如何讲解的。 由于引进了C++ 这个名字,写出了C++ 的参考手册 [Stroustrup,1984],与C语言的兼容性问题就变成了一个最重要的问题,而且也成为争论的焦点。 还有,到1983年后期,贝尔实验室里负责开发和支持UNIX、生产AT&T的3B系列计算机的分支机构开始对C++ 感兴趣,它已经希望为C++ 工具的开发投入一些资源。不幸的是对于使C++ 的发展由一个人独舞转变为一个公司的支持关键性项目所用的语言

人邮异步社区 1万+

SAP项目中 Waterfall vs Agile 的深度对比分析背景:方法论的演进SAP项目实施方法论经历了显著的代际更替。早期以 ASAP(Accelerated SAP) 为代表,采用经典瀑

本文对比分析了SAP项目实施中瀑布模型(ASAP)与敏捷方法(SAP Activate)的核心差异。瀑布模型采用线性流程,需求固定但变更成本高;敏捷方法则通过迭代开发实现动态调整,强调最佳实践和用户持续参与。文章指出,SAP系统的复杂性使纯粹敏捷难以实施,需在标准化与定制化间取得平衡。最终建议根据项目特性选择方法论:稳定需求适用瀑布模型,变化频繁则推荐敏捷,而SAP Activate本质上是两者的结构化融合,代表未来趋势。关键在于匹配项目实际需求,而非盲目追随方法论潮流。

金牌架构师 345

C/C++语言篇

本系列文章初衷是为了整理出最全面最详细的C/C++后端开发面经,非常适用于想走后端/软件开发的同学!本面经不仅仅是简单问答,而是帮你深入理解和掌握知识点,其中一些晦涩难懂的知识点,全都用案例和代码帮你彻底掌握。本篇主要是针对C++语言相关部分的知识点展开详细的讲解,包括C/C++语法部分、底层原理、类和对象、STL容器和算法、C++新特性、设计模式、以及各种细节题等。

weixin_46571171的博客 3210

【2024年华为秋招-12月25日-第三题(300分)- PCB印刷电路板布线】(题目+思路+Java&C++&Python解析+在线测试)

在PCB印刷电路板设计中,器件之间的连线需要避免线路的阻抗值增大、而且赛件之间还有别的器件和别的干扰源,在布线时我们希望受到的干扰尽量小。现将电路板简化成一个M×N的矩阵,每个位置(单元格)的值表示其源干扰度。如果单元格的值为0,表示此位置没有干扰源;如果单元格的值为非0,则表示此位置是干扰源,其值为源干扰度。连线经过干扰源或干扰源附近会增加连线的总干扰度。位置Axy的干扰源的源干扰度为dd01、若连线经过位置Axy,则其总干扰度会增加d;2、若连线经过离位置A。

m0_73659489的博客 344

Autosar软件组件分析及ARXML文件分析

Autosar软件组件分析及ARXML文件分析

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 3602

C语言和C++的区别和联系

C语言虽说经常和C++在一起被大家提起,但可千万不要以为它们是一种编程语言。我们来介绍C语言和C++中的区别和联系。 首先C++和C语言本来就是两种不同的编程语言,但C++确实是对C语言的扩充和延伸,并且对C语言提供后向兼容的能力。对于有些人说的C++完全就包含了C语言的说法还是有点别扭的。 一、C语言是面向过程语言,而C++是面向对象语言 我们都知道C语言是面向过程语言,而C++是面向对象语言,说C和C++的区别,也就是在比较面向过程和面向对象的区别。 1、面向过程和面向对象的区别 面.

weixin_55305220的博客 2万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

从C语言到C++的进阶之C到C++的转变(篇一)

C++是在C语言的基础上发展出来的,在C语言的基础上又形成了新的对象、类、继承等用法,本文专注于从C语言到C++的转变与进阶,不断深入学习C++语言程序设计。

Viewinfinitely的博客 1671

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【C/C++】C语言&C++标准版本+不同版本的新特性(C89/90、C95、C99、C11、C17;C++98、C++03、C++11、C++14、C++17、C++20)(截止到2023年)

C语言:C89/90、C95、C99、C11、C17;C++:C++98、C++03、C++11、C++14、C++17、C++20;列出每个版本的一些主要特性。

crr411422的博客 2万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C语言快速进阶C++(基本篇+STL篇)

C语言快速进阶C++(基本篇+STL篇)用C++做题的好处 using namespace std cin,cout头文件 变量声明 bool变量 const定义常量 string类 结构体 引用& vector set map(键值对) stack(栈) queue(队列) unordered_map和unordered_set(无序键值对和无序集合)

Believe_jt的博客 2915

C语言高手进阶的三碟小菜和一盘大餐

前段时间一直到现在正在看的几本书,觉得真心不错,给很多朋友都推荐过,现在正好赶上这个活动,也分享一下。首先说明一下的是,这次推荐的书都是进阶用的,学完这几本书再辅以在实践中相应的应用与领悟,应该能够彻底了解C语言,成为C语言的高手了。所以,如果你还是个C语言没有入门,连int、for、while,函数,关键字,变量都不懂的人,那么最好还是先找本介绍基础C语言语法的书来学习一下,最好不过的应该是C语

Yeah517716172的专栏 8057

【Cpp】C和C++混合编程

一、混合编程杂绪 1.1 为什么需要混合编程 Cpp是从C演变过来的,C有很多优秀成熟项目和库,没必要在C++中重写,C++程序可以直接调用调用 庞大项目划分后一部分适合用C(底层),一部分适合用C++(中间层、上层) 1.2 混合编程的支撑 编译型程序的编译过程:源文件->目标(库)文件->可执行程序->镜像文件 任何编程语言执行时都必须是可执行程序,所以都必须先被编译成...

baymaxly的博客 7735

猿创征文|【听听iecne怎么说】C语言 vs Cpp vs C# 有何区别?

共同学习,加入粉丝群,加V:YAN_Pisces_Boom哈喽大家好,我是iecne,本期为大家带来的是【听听iecne怎么说】C语言 vs Cpp vs C# 有何区别?包教包会,快来看看吧!C语言适用于底层应用开发,可以对硬件进行强操控。C++适用于更可控的底层应用不喜欢Java去学C#三连->动力给个三连吧!本节课主要是写了一些杂谈,至此该课示例的思想博主已经分享完了,相信大家对这个逻辑有了一定的理解,大家可以自己动手敲敲代码,感受一下,包教包会。

iecne的博客 2833

C语言到C++快速入门

C语言快速进阶C++ 无废话纯干货

m0_74000825的博客 1397

STM32 进阶教程 7 -  C与C++混合编程

前言 在嵌入式开发过程中经常会用到第三个芯片/设备,这些第三方的芯片提供的DEMO程序或驱动程序有时候是C++,如果先前的系统用C语言写的就会出现点问题,往往需先将C++的驱动程序自已手动改成C语言再用,本节给大家介给一下如何在KEL MDK环境中实现C与C++混合编程。本节将在《STM32 进阶教程 4 - 软件实现高精度延时 2》基础上将Delay.c变成C++实现的Delay.cpp编代...

张十三的博客 9131

C语言和C++到底有什么关系?

C++ 读作“C 加加”,是“C Plus Plus”的简称。顾名思义,C++ 就是在 C 语言的基础上增加了新特性,玩出了新花样,所以才说“Plus”,就像 Win11 和 Win10、iPhone 15 和 iPhone 15 Pro 的关系。C 语言是 1972 年由美国贝尔实验室开发成功的,在当时算是高级语言,它的很多新特性都让汇编程序员羡慕不已,就像今天的 Go 语言,刚出生就受到追捧。

zdoeo的博客 2591
上一篇: 从C语言到C++的进阶之C++的非类新特性(篇二)
下一篇: 从C语言到C++的进阶之面向对象、using与命名空间(篇四)
鸿蒙Next
鸿蒙Next 优质创作者: python技术领域 优质创作者: python技术领域
博客等级 码龄7年 2万+粉丝 300原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿蒙Next

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值