一、C++中的多态
- 优点:多态性是面向对象编程的重要特性之一,它使得一个接口能够实现不同的功能。多态性可以分为静态多态和动态多态。
静态多态:静态多态通过函数重载来实现,是在编译时根据参数的个数和类型来确定调用的函数。C++的函数重载就是一种静态多态。
动态多态:动态多态通过虚函数和继承来实现,是在运行时根据实际对象类型来确定调用的函数。
二、C++中的函数重载
- 1、用相同的函数名,定义不同的功能。称为函数重载
- 2、重载的函数根据参数的个数和类型进行区分
- 3、不能根据返回值进行区分
C++函数重载的原理
- 函数重载是一种让多个函数共享一个名称,但根据参数的个数和类型的不同,执行不同功能的机制。
- 1、C++编译器在编译的时候会《自动检测》用户编写的函数,《参数列表》根据参数列表的不同,对函数名进行别名化,来产生多个名称不一样的函数。
- 2、根据用户传入的《参数》来自动推导类型去确定要执行的函数
练习:编写一个add函数,可以实现两个整形相加,两个浮点型相加
#include <iostream>
using namespace std;
void add(int a, int b)
{
cout << "int" << a + b << endl;
}
void add(double a, double b)
{
cout << "float" << a + b << endl;
}
int main()
{
add(10, 20);//根据传入的参数不同,自动推导调用的函数 pf_int_int(int a, int b);
add(1.1, 2.2);//根据传入的参数不同,自动推导调用的函数 pf_double_double(double a, double b);
}
//都是c++ 编译器自动去完成的!!不需要用户干预!!
三、函数重载的注意事项
- 1、函数重载时函数名必须一样
- 2、函数重载的依据 <参数个数> <参数类型> 不一样
- 3、返回值类型不能作为重载的依据(函数重载要求函数名相同,但根据参数的个数和类型进行区分。返回值类型不影响函数重载。)
- 4、调用函数时,需要防止重载函数歧义的参数
四、重载函数的默认参数
1、默认参数:在C++中定义函数的时候,可以使用默认参数进行形参的赋值
#include <iostream>
using namespace std;
// 定义一个带有默认参数的函数
void func(int a = 100)
{
cout << a << endl;
}
int main()
{
func(); // 调用函数时不传递参数,使用默认参数
}
默认参数作用: 简化函数的调用!!
2、默认参数的填写顺序
提示:当调用函数时省略的参数会采用从右到左的顺序填充默认值。
fp(10, 20, 30) 10传递给a, 20传递给b, 30传递给c
五、使用默认参数简化函数的调用例子
#include <iostream>
using namespace std;
extern "C"
{
#include <stdio.h>
}
//映射一个设备 , 利用默认参数封装mmap 是他的调用更加简单
void* my_mmap(int fd,size_t length,
intprot=PROT_READ|PROT_WRITE,intflags=MAP_SHARED,
void *addr=NULL,off_toffset=0)
{
return mmap(addr,length,prot,flags,fd,offset);
}
int main()
{
//打开一个文件
int fd = open("1.txt", O_RDWR);
if(fd < 0)
{
cerr << "打开文件失败" << endl;
return 0;
}
//映射文件
void *p = my_mmap(fd, 1024);
//只读权限
void *p1 = my_mmap(fd, 1024, PROT_READ);
//修改权限
void *p2 = my_mmap(fd, 1024, PROT_READ, MAP_SHARED_VALIDATE);
}