多态与重载

函数的重载与多态

重载函数

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。不能只有函数返回值类型不同。

  • 重载函数注意事项

对于两个重载函数:

1 函数的参数个数不同。
2 函数的参数类型不同或者参数类型顺序不同。
3 不能创建新的运算符,只有已有运算符可以被重载。

下面通过一个简单的例子来说明函数重载:

#include<iostream>
using namespace std;

void print(int i)
{
        cout<<"print a integer :"<<i<<endl;
}

void print(string str)
{
        cout<<"print a string :"<<str<<endl;
}

int main()
{
        print(12);
        print("hello world!");
        return 0;
}

通过上面代码的实现,可以根据具体的print()的参数去调用print(int)还是print(string)。上面print(12)会去调用print(int),print("hello world")会去调用print(string)

多态

允许将子类类型的指针赋值给父类类型的指针。

  • 多态的作用

把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。 赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作.

typedef void(*FUNC)(); //定义一个函数指针来实现对成员函数的继承
 typedef void(*FUNC)(); //定义一个函数指针来实现对成员函数的继承
struct Base  //父类
{
    FUNC fun;
    int B1;
};
struct Derived//子类
{
    Base b1;
    int D1;
};
void fb()      
{
    printf("b1:fun()\n");
}
void fd()       
{
    printf("d1:fun()\n");
}
int main() {
    Base b1;
    Derived d1;

    b1.fun = fb;
    d1.b1.fun = fd;

    Base *p1 = &b1;
    p1-> _fun(); 

    p1 = (Base *)&d1;
    p1->fun(); 

    getchar();
    return 0;
}
  • 多态的主要特点

1、继承体系下。继承:是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性 和行为,并能扩展新的能力,已有类被称为父类/基类,新增加的类被称作子类/派生类。

2、子类对父类的虚函数进行重写。

posted @ 2019-10-27 23:39  SnowYouth  阅读(2779)  评论(0编辑  收藏  举报