【C++】多态(上) 多态 | 虚函数 | 重写 | final、override | 接口继承与实现继承 | 抽象类

一、多态

概念

多态,就是多种状态,即不同的对象去完成同一个行为时会产生出不同的状态。比如:买票时,成人要原价买,学生和老人就可以享受优惠价便宜一点儿。同样是买票这个行为,不同的对象来做就有不同的状态,这就是多态的一种体现。

从代码实现上来说,多态指的是通过一个父类指针 or引用调用一个虚函数时,会根据具体对象的类型来调用该虚函数的不同实现。在多态中,相同的操作可以作用于不同的对象,而具体执行的操作则取决于对不同对象的类型判断。(“看人下菜碟🤪”)

那怎么构成多态呢?有两个条件:

1.子类重写父类的虚函数

2.通过父类的指针或引用去调用虚函数

估计你现在是一头雾水:啥是虚函数?啥是重写?多态到底是怎么用的?

不急,你现在对多态的概念一定还是一片混沌。下面我先讲解“虚函数”、“重写”的概念,然后举出多态的代码实例,你才能体会什么是多态。看到后面,再回过头来看多态的概念,会有更透彻的理解。

虚函数

先来学习一个知识点“虚函数”,注意,和菱形继承那里的 虚继承 是两个完全不同的概念!它俩的关系就是金鱼和自行车之间的关系。

🎈虚函数:被virtual修饰的类成员函数称为虚函数。

虚函数必须是非静态的成员函数,非成员函数和静态函数是无法成为虚函数的。

class Person {
public:
    virtual void BuyTicket() { …… }
};

虚函数的作用是:实现多态机制。

重写(覆盖)

若子类定义了一个和父类的虚函数 一模一样的虚函数,那么称子类中的虚函数重写 / 覆盖了父类的虚函数。(拥有相同的名字、返回值、形参列表)

重写是针对虚函数的概念。普通函数是没有重写的说法的。

例:

class Person 
{
public:
    virtual void BuyTicket() {
        cout << "成人票10r" << endl;
    }
};
class Student:public Person
{
public:
    virtual void BuyTicket() {    //子类中的虚函数重写了父类的虚函数
        cout << "学生票5r" << endl;
    }
};

其实,在重写基类虚函数时,派生类的虚函数即使 不加virtual关键字,也是可以构成重写的

这是因为,继承后基类的虚函数被继承下来了,在派生类依旧保持虚函数属性。

但是该种写法不规范,不建议这样使用。我们还是老老实实加上virtual吧。

如何构成多态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值