函数参数的默认值
一个函数在定义或者声明时 可以给参数指定默认值,那在调用这个函数时 如果不给这个参数传实参则使用默认的参数值,
如果传入参数值 则使用传入的值替代默认的值。
作用:减少函数的个数 方便调用
限制:参数的默认值,必须靠右
一个参数有默认值,则参数右边所有参数必须都有默认值
当函数的声明 和实现分开时 参数的默认值需要声明中指定 实现不再指定
#include <iostream>
using namespace std;
void show(int x=1,int y=2){
cout << x << endl;
cout << y << endl;
}
int main(){
show();
show(1);
show(100,200);
}
内联函数
inline
在编译时 请求编译器把函数的二进制直接复制到调用位置 这样减少开函数栈 和清理函数栈的开销提高效率
大函数 稀少调用的函数 不适合内联
小函数 频繁调用 适合内联
递归函数 无法实现内联
内联只是一种请求 请求成功就按照内联方式调用
请求失败 就按照普通函数的方式去调用
#include <iostream>
using namespace std;
inline getmax(int x,int y){
return x>y?x:y;
}
int germin(int x,int y){
return x>y?y:x;
}
int main(){
getmax(1,2);
getmin(100,200);
}
c++ 中的动态内存分配
c中 malloc realloc calloc free
c++ 中使用
new delete
/*分配堆内存*/
类型 *指针名 = new 类型;
类型 *指针名 = new 类型(值);
/*释放堆内存*/
delete 指针名
new[] delete[]
#include <iostream>
using namespace std;
struct Date{
int year;
int month;
int day;
void show(){
cout << year << '-' << month << '-' << day << endl;
}
};
int main(){
Date date;
cout << &date << endl;
Date *pd = new Date();
cout << pd << endl;
pd->year = 2018;
pd->month = 10;
pd->day = 31;
pd->show();
delete pd;
}
申请多个元素空间
类型 *parr = new 类型名[n];
int *parr = new int [10];
delete[] parr;
定位内存分配
c++ 中的引用
概念
引用就是一个变量的别名
语法
int a=99;
int& ra=a;
引用类型 必须初始化
类型& 引用名=值;
引用一旦初始化 则在这个变量的生命期内这个引用名只能为这个变量服务。
引用的应用
函数的参数
/*引用传递*/
void myswap(int &x, int& y);
void myswap(int x,int y);
/*写一个函数完成两个整数变量的值交换*/
可以在函数内部 访问到函数外部的数据
减少复制 真正存储空间只有一份
函数的返回值
c中函数的返回值 一般作为右值。函数返回值是一个只读的空间。
不能返回局部变量的引用 可以返回 全局 静态 堆内存 引用
常引用 和 引用的底层实现
const int& ra =100;
c++ /*引用类型的参数 加一个const 是为了增强函数的兼容性 除非要在函数内修改参数*/
常引用 既可以引用常量 也可以引用变量
c 作用就是防止函数内部对变量进行修改 /**/
引用和指针的联系 和区别?
c++ 中的类型转换
(类型) 强制类型转换
static_cast<类型>(变量)
在某一个方向上 可以做隐士类型转换
int *pi = new int(100);
void *pv = pi;
#include <iostream>
using namespace std;
int main(){
int *pi=new int(100);
void *pv =pi;
int *pt=static_cast<int*>(pv);
cout << *pt << endl;
}
dynamic_cast<类型>(变量)
用在具有多态性的父子类之间
const_cast<类型>(变量)
专业去常的转换
#include <iostream>
using namespace std;
int main(){
volatile const int a=100;
//int *pa = (int*)&a;
int *pa = const_cast<int*>(&a);
*pa=200;
cout << *pa << endl;
cout << a << endl;
/*对内存进行重新解释 最接近强制类型转换*/
}
reinterpret_cast<类型>(变量);
最接近C强制类型转换
把整数变成指针
指针变成整数