二部分
1.函数的默认值
2.函数重载
3.inline函数
4.C/C++相互调用
5.引用
6.const
const和指针的结合
7.new/delete
8.namespace
函数调用过程
实参的入栈顺序 自右向左
函数的实参和形参的匹配顺序 自左向右
函数的默认值
函数设计过程中给予形参默认值
没有实参,形参有默认值
函数默认值的赋予规则
1.默认值的赋予自右向左依次赋予
2.默认值不能重复赋予
3.默认值一般设立在声明上
#include<iostream.h>
using namespace std;
double GetCirle(double a,double b,double c = 40.1)
{
cout << c << endl;
return a + b + c;
}
//函数设计过程中给予形参默认值
//没有实参,形参有默认值
int main()
{
GetCirle(10.1.20.1,30.1);//这里的c输出30.1
GetCirle(10.1,20.1);//这里的c输出默认值,40.1
return 0;
}
**
int Sum(int a = 10, int b, int c = 30)//默认值的赋予自右向左依次赋予
{
return a + b + c;
}
int main()
{
Sum(10);
}
int Sum(int a = 10, int b, int c = 20)
int Sum(int a = 10, int b, int c = 30)
//默认值不能重复赋予
int Sum(int a, int b,int c = 20)
int Sum(int a, int b = 20, int c)
//第二行的c默认为第一行的20
typedef struct Node
{
int data;
struct Node* next;
}Node,*PNode;
void SetValue(PNode* pn, int val = 0)
{
pn->data = val;
pn->next = NULL;
}
int main()
{
Node head;
SetValue(&head);
Node nd1;
SetValue(&nd1,20);
return 0;
}
函数重载
函数重载三要素
1.同名
2.不同参
3.同作用域
bool Compare(int a,int b)
{
return a > b;
}
bool Compare(double a,double b)
{
return a > b;
}
bool Compare(char* a,char* b)
{
return strcmp(a,b)>0 ? true : false;
}
int main()
{
//告诉编译main局部存在了一个int版本的Compare
bool Compare(int ,int);//int版本的Compare
//就近原则
Compare(10,20);
Compare(10.1.20.1);//强制转换
Compare("hello","world");//char*不能转化成整型
return 0;
}
同名的函数的关系
1.函数的返回值 函数重载和返回值没影响
2.函数名称 函数重载和函数名称没影响
3.形参列表
(1)形参类型不同 有影响
(2)形参个数不同 有影响
(3)形参顺序不同 有影响
问题:为什么
C 中 同名函数不能共存
C++中 同名函数能共存
函数符号生成规则
C:只和函数名称有关
C++:函数原型 返回值 + 函数名称+形参列表
函数原型
函数返回值 函数名称(形参列表)
返回值的代表符号
int H
double N
float M
char D
两个数相加,使整个处理和类型无关
1.宏
宏函数 不安全 没有类型检查和安全检查
2.void* 泛型
半开半闭的区间 非常容易越界
3.函数重载
同名函数可以共存
优化Sum函数
int Sum(int a,int b)
{
return a + b;
}
int main()
{
Sum(10.6,20.7);
return 0;
}
//函数重载
int Sum(int a,int b)
{
cout<< "int Sum(int, int)" <<endl;
return a + b;
}
double Sum(int a,int b)
{
cout<< "double Sum(double, double)" <<endl;
return a + b;
}
char Sum(int a,int b)
{
cout<< "char Sum(char, char)" <<endl;
return a + b;
}
int main()
{
Sum(10,20);
Sum(10.6,20.7);
Sum('a','b');
return 0;
}