帖子摘要:?主页我的代码爱吃辣 知识讲解C 创作者我的代码爱吃辣 ??开发环境Visual Studio 2022 前言补充C语言语法的不足以及C是如何对C语言设计不合理的地方进行...... ! Q, I m/ F5 u5 J2 p ) e* B, t( Q( T o- S, i0 b大家好,欢迎来到Java吧(www.java8.com),交流、学习Java技术、获取Java资源无任何套路,今天说一说:“C++——函数重载,引用”; [. {; X/ E; `7 G$ a 7 Z( d) ]6 A& u
+ z& L' ^9 f) j 8 i, @7 ~ y! S" T) v3 u2 p
. o& I; Y- C- w % x4 F) r. n/ c' G9 x& m7 x
?主页我的代码爱吃辣4 ^$ w2 u* b3 V& `9 H
知识讲解C++ 0 b5 x' D( B# A2 j 创作者我的代码爱吃辣 ) |7 R! L7 p' [8 h0 I ??开发环境Visual Studio 2022 ( A- X, ] N, M2 \- g( I6 T. T 前言补充C语言语法的不足以及C++是如何对C语言设计不合理的地方进行优化的比如作用域方面、IO方面、函数方面、指针方面、宏方面等。8 f# V, k* c: G& w8 c
- w6 d/ `! t! J1 C2 \1 u! ~ : Y! m1 x) i$ n' K 目录 ) V0 H; U4 ?) { ; x' n- W! c2 N- x# @3 ?: C9 T' v6 U, h
一.函数重载 4 I3 v; ^2 X( ?0 u( ? 1 o6 J0 Y6 L* S7 _(1)函数重载概念/ R" c, x) _, V
$ f/ F k' [ @* k6 d* T$ U6 ]) n
1.参数类型不同) x4 j% c" D# h# l! J. Z w3 G5 L8 _
8 P2 ^; H' Y' O
2.参数个数不同& c3 E8 s8 L/ q' K F; Y/ y: p
0 z, ^8 p" p! I# x
3.参数类型顺序不同# C3 J V5 ^) d7 @3 J/ |. R
1 @' D: k c8 s% [% Q
(2)C++函数重载的原理! p; m: Q G, W; D; R# f
: z+ b: A, k" g) R
二.引用 . H7 o5 y0 c7 R. `- B! L ! h2 u$ ]- k6 F# [0 M1引用的概念 . U6 f G! P2 r) k0 P 8 R0 B" `: R! r3 g
2引用特征 0 @; W& `) {8 a. }' M8 l7 @& r 5 S; o) V7 D5 w7 m
1.引用在定义时必须初始化 e4 C' q' |. U+ B ( c$ u- v; ^- R# s2.一个变量可以有多个引用& \' a! g d% M7 ?
5 t- `1 ^& c! g# _" M3.引用一旦引用一个实体再不能引用其他实体# M! s+ a2 n: c
! H( Y; O$ O- `: L% w
3常引用 1 ?. q, c' A; w 3 u" ^+ X2 V+ `3 i: u
4 使用场景8 D t3 X: z: S# g. L" h" o
9 |: M6 x" l, [' ^ t0 v6 k1.做参数2 z+ T) [2 Y, M; R6 L
" V) m4 u' m. d$ `4 Y8 Y& Q' u9 F4 R 2.作为返回值 5 m' w! w. j. j$ L4 j + y" F4 ]: r" n$ q
5传值、传引用效率比较 2 [7 B( W$ R9 O. Y * r& y: }3 a5 R( V8 V J( P$ ~ 6引用和指针的区别 ( t6 C. K% u0 j$ c# V# w% ? 0 P. J# s* R4 L+ A$ M一.函数重载 1 c: `" U2 \2 Y: d; t0 s$ }在自然语言中一个词可以有多重含义人们可以通过上下文来判断该词真实的含义即该词被重! E1 `8 [8 H) o/ q
载了。 8 M. S/ m) V/ b5 Y 比如以前有一个笑话国有两个体育项目大家根本不用看也不用担心。一个是乒乓球一个 ( m( h& ?$ ~! o8 { @* h 是男足。前者是“谁也赢不了”后者是“谁也赢不了”+ P! K! `( U9 C' p9 z6 G# T
7 o u4 ~- P0 o$ K6 R- \6 k w; ^
(1)函数重载概念 ; ]8 C% g3 q5 n7 Y5 O. z
函数重载是函数的一种特殊情况C++允许在同一作用域中声明几个功能类似的同名函数这9 f7 j0 Z X z* M$ {( [
些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同常用来处理实现功能类似数据类型 5 ]' N# ?. p9 y0 e7 H, v 不同的问题。3 \3 N3 W9 r6 L4 H) k' x
7 s' R$ m% m& P! t* B2 W
1.参数类型不同 6 d& E/ x$ ]5 y8 ~2 }
int Add(int left, int right)
{
: z7 k4 w& C$ f& k" a
cout
[img]/f51b080ce5564d6a88f6348a162ac709.png[/img]
6 a a7 K1 o% m# p7 h! P+ D
2 j1 Y7 M: ~- W/ L
2.参数个数不同
[code]void f()
0 ]0 c1 c! ^! \' t& m* Y
{
cout
3.参数类型顺序不同
7 f+ X- Z" {( P# u3 @ Q
[code]void f(int a, char b)
{
cout
(2)C++函数重载的原理[/size]
2 m1 M. S' Y! `) e* j5 _2 W
我们知道C语言不支持函数重载为什么C语言不支持函数重载呢当有两个函数名相同的函数时C语言就已经无法区分了是因为C语言仅仅就是通过函数名来区分每个函数。但是在C++里面C++通过对函数名配合参数进行修饰就可以通过函数名以及函数参数特点对每个函数进行区分。
9 g( O$ t3 H: M5 h
[b]通过这里就理解了C语言没办法支持重载因为同名函数没办法区分。而C++是通过函数修
饰规则来区分只要参数不同修饰出来的名字就不一样就支持了重载。[/b]
( J; F+ v, a, _2 H% Q! _4 b2 C
[b]如果两个函数函数名和参数都是一样的仅仅是返回值不同是不构成重载的因为调用时编译器没办法区分。[/b]
, ^; `. D$ L' v2 w) |
二.引用
1引用的概念[/size]
[b]引用不是新定义一个变量而是给已存在变量取了一个别名编译器不会为引用变量开辟内存空
. y) U' U" r1 |# X
5 d6 p1 f% O& N, J0 q) z
在PushBank时如果我们遇到第一个结点时就需要把第一个结点作为头结点此时需要更改函数外面的 head 指针就必须要 head 的地址在函数里面就得使用二级指针。$ q- f' t- [; F Z/ D
; g+ V2 ~* t9 Z6 U
现在我们有了引用就可以很方便的解决这个问题. i4 e3 N! ~9 A