3、C++中的多态与函数重载

一、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);
}

猜你喜欢

转载自blog.csdn.net/qq_53402930/article/details/132394821