1.多态概念
多态:完成某个行为,当不同的对象去完成时会产生出不同的状态。
例子:不同的人去火车站买票,有的人买的是成人票,有的人买的是学生票,这就是多态的行为。
2 多态的定义
条件:
1.调用函数的对象必须是指针或者引用
2.被调用的函数必须是虚函数,且完成了虚函数的重写
什么是虚函数?
虚函数:就是在类的成员函数前面加virtual
class Person
{
public:
virtual void BuyTicket()
{
cout << "支付半价票" << endl;
}
};
什么是虚函数的重写
派生类有一个和基类完全一样的虚函数,**完全相同是指:**函数名,参数吗,返回值相同。
不规范写法:派生类不写virtual也能实现。
class Person
{
public:
virtual void BuyTicket()
{
cout << "支付半价票" << endl;
}
};
class Student : public Person
{
public:
//void BuyTicket()//不规范写法
virtual void BuyTicket()
{
cout << "支付全价票" << endl;
}
};
void Func(Person& people)
{
people.BuyTicket();
}
void Test()
{
Person p;
Func(p);
Student s;
Func(s);
}
虚函数重写的例外:协变
重写的虚函数的返回值可以不同,但是必须分别是基类指针和派生类指针或者基类引用和派生类引用。
class A
{
};
class B : public A
{
};
class Person
{
public:
virtual A* f()
{
return new A;
}
};
class Student : public Person
{
public:
virtual B*