【c++学习笔记】(一)从c到c++

笔记参考中国大学mooc上的北京大学-程序设计与算法(三)C++面向对象程序设计的视频课程

一、引用的概念

1.引用的介绍

int n = 4;
int & r = n;//r引用了n ,r的类型是int &

这里r等价于n,对r做修改,n也会被修改,引用最直观的用处就是在函数内修改所传入的参数:

//传引用比传指针更加安全
//引用初始化以后,就不可以再被改变为另一个对象的引用。
//而指针仍是指向该地址,对象析构以后,就可能会出现野指针
void swap(int & a, int & b)
{
    int tmp;
    tmp = a;
    a = b;
    b = tmp;
}
//在这个函数里,由于引用的介入,可以完成对a,b值的交换
//同样的功能在c里需要这样实现:
void swap(int *a, int *b)
{
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}

在定义引用时一定要初始化成引用某个变量

2.常引用

不能通过常引用去修改其引用的内容:

int n = 100;
const int & r = n;
r = 200; //编译会出错
n = 300;//没问题

二、const的用法

const和#define作用类似,但是推荐尽量用const来定义常量,这样会使常量有固定的类型。

三、动态内存分配

c使用malloc实现,c++主要用new,两种用法:

更新下:T_T,面试被问到new和malloc的区别,应该是malloc返回void *,需要再进行转换,new直接返回对应类型指针。

  • 第一种,分配变量
P = new T;
动态分配出一片大小为 sizeof(T)字节 的内存空间,并将其起始地址赋值给P

T是任意类型名,P是类型为 T * 的指针

  • 第二种,分配数组
P = new T[N];
//动态分配出一片大小为 sizeof(T)字节 的内存空间,并将其起始地址赋值给P

T:任意类型名
P:类型为T*的指针
N:要分配的数组元素个数,可以是整形表达式

用delete释放内存:

有new,必有delete

当new了数组后,使用delete [] p; 来完全释放内存空间

四、内联函数和重载函数

  • 内敛函数

函数调用有额外开销,为了快速调用简单函数,可以使用inline定义内联函数,缺点是程序体积会增大

内联函数:把代码直接插入,不在跳转。

inline int Max(int a,int b)
{
    ...
}
  • 函数重载

名称一样,参数表不一样

  • 缺省参数

可以有缺省值,就是默认值,与python类似:

void func(int x1, int x2 = 2, int x3 = 3)
{

}
如果有这样调用:
func(10,8)  即x2 = 8,不在等于2

可以利用缺省值,方便维护 

猜你喜欢

转载自blog.csdn.net/jitanban0579/article/details/88598440