多态与重载
函数的重载与多态
重载函数
重载函数是函数的一种特殊情况,为方便使用,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、子类对父类的虚函数进行重写。