静态多态
如下所示:
void test(int a){ cout << "1" << endl; }
void test(int a,int y){ cout << "2" << endl; }
void test(int a,int y,int z){ cout << "2" << endl; }
int main()
{
test(1);
test(1, 2);
test(1, 2, 3);
虽然调用的三个函数名字相同,但是在编译的时候已经直到调用的是哪一个函数。
编译前已经知道了对同一函数的不同响应。
动态多态
这个地方引用的是我另一篇博客的代码。
即将animal作为基类,然后产生三个派生类cat类,dog类,pig类,并定义出一个animal数组,数组的每个位置都是基类和派生类之间转化而来的。
此时在编译的时候,数组的三个位置都调用show函数时,不能里面分辨出是哪个类对象的show函数,之后在运行时才知道,这种就叫做动态多态。
#include
using namespace std;
class animal
{
public:
virtual void show()
{
cout << "我是animal类" << endl;
}
};
class dog :public animal
{
public:
void show()
{
cout << "我是dog类" << endl;
}
};
class cat :public animal
{
public:
void show()
{
cout << "我是cat类" << endl;
}
};
class pig :public animal
{
public:
void show()
{
cout << "我是pig类" << endl;
}
};
int main()
{
cat a; dog b; pig c;
animal *x[3] = { &a, &b, &c };
for (int i = 0; i < 3; i++)
{
x[i]->show();
}
system("pause");
return 0;
}
优点:
缺点:
优点:
缺点: