01 C++的引用,const,new/delete,重载,内联函数的概念辨析

时间:2021-04-05 12:40:30   收藏:0   阅读:0

1 引用的概念

1-0 基本概念
1-1 变量的引用
int a = 0;
int &r = a;   //变量r的类型为int &
1-2 函数返回值的引用
#include <iostream>
using namespace std;
int n = 4;
//函数体setvalue()实现对返回值n的引用
int & setvalue(){ return n; }
int main()
{
    setvalue() = 40;     // 直接对返回值进行修改
    cout << n << endl;   // 40
    return 0;
}
1-3 常引用

要求:无法通过常引用修改变量值

#include <bits/stdc++.h>
#define DEBUG
using namespace std;
int main()
{
	int n = 100;
	const int & r = n;
	n = 1000;
	r = 1000;
    return 0;
}
/*
[Error] assignment of read-only reference ‘r‘
*/
1-4 常引用与非常引用的转换
1. const T & 与  T & 是不同的类型(常引用与非常引用属于不同的类型)。
2. 常引用可以被普通引用以及普通类型变量初始化。
3. 常量以及常引用无法初始化引用。
1-5 const关键字的使用
/*
1. 定义常量指针,无法通过常量指针修改内容
2. 函数参数为常量指针时,可避免函数内部不小心改变 参数指针所指地方的内容。
3. 定义为const的对象的所有数据成员的值都不能被修改。凡出现调用非const的成员函数,将出现编译错误。但构造函数除外。因为如果调用非const函数无法保证对象不被修改。与const的规则的相违背。
*/
const int * p = & n;     //定义常量指针
const int & r = n;       //定义常引用
概念辨析:
常引用所引用的变量,其值不能被修改(错误,可以通过引用的对象修改原有的变量)
不能通过常量指针,去修改其指向的变量(正确)
常量指针一旦指向某个变量,就不能再指向其他变量(错误)

2 内存的分配

2-1 new与delete的使用
P = new T;
delete 指针;
------------------------------------------------------------------------------
int * pn;
pn = new int;
* pn = 5;
P = new T[N];
delete [ ] 指针;
2-2 指针使用注意点
-----------------------------------
char * p = new int;
p = ‘a‘;                               // 错误,字符类型赋值给指针变量
delete p;
----------------------------------
int *p = new int[25];                   
p[10] = 100;                            // 错误,越界
delete p;
-----------------------------------
char * p = new char[10];               // 正确
p[0] = ‘K‘;
delete [] p;

3 内联函数与函数重载与函数的缺省参数

3-1 内联函数
/*使用inline关键字定义内联函数*/
inline int Max(int a,int b)
{
    if( a > b) return a;
    return b;
}
3-2 函数重载

重载函数具有以下特点

编译器如何区分重载函数?

重载的好处

重载的实例

int Max(double f1,double f2) { }          // (1)
int Max(int n1,int n2) { }                // (2)
int Max(int n1,int n2,int n3) { }         // (3)

Max(3.4,2.5);     //调用 (1)
Max(2,4);         //调用 (2)
Max(1,2,3);       //调用 (3)
Max(3,2.4);       //error,没有参数1为int类型,参数2为double的类型的重载函数

注意点:

3-3 函数的缺省参数

实例:

void func( int x1, int x2 = 2, int x3 = 3){ }
func(10 ) ;                         //等效于 func(10,2,3)
func(10,8) ;                        //等效于 func(10,8,3)
func(10, , 8) ;                     //不行,只能最右边的连续若干个参数缺省

概念辨析:

A) 多个重载函数的参数个数必须不同。                     (错误,可能时类型不同)
B) 两个函数,参数表相同,返回值类型不同,它们是重载关系。    (错误)
C) 调用一个第二个和第三个参数都有有缺省值的函数时,可以不写第二个实参而写第三个实
参。                                (错误,参数时按照顺序匹配的)
D) 使用内联函数的目的是提高程序的运行速度

参考资料

01 《新标准C++程序设计》 郭炜 编著

02 MOOC 程序设计与算法(三)


2018年4月7日笔记

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!