c++三大特性之多态

目录

1. 多态的概念

2. 多态的定义及实现

        2.1多态的构成条件

        2.2 虚函数

        2.3虚函数的重写

                2.3.1虚函数重写的两个例外:

                                        1.析构函数的重写

                                        2.协变

        2.4 C++11 override 和 final

                          2.5重载,覆盖(重写),隐藏(重定义)的对比

3. 抽象类

4.附上一个经典例题


1. 多态的概念

1.1 概念
        多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态

2. 多态的定义及实现

2.1多态的构成条件

  • 1. 必须通过基类的指针或者引用调用虚函数

  • 2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写

2.2 虚函数
  • 虚函数:即被virtual修饰的类成员函数称为虚函数。
class Person {
public:
     virtual void BuyTicket() { cout << "买票-全价" << endl;}
};

注意:这里使用的虚函数与继承中的virtual修饰虚继承没有任何关系,只是共用了一个关键字而言

2.3虚函数的重写
        虚函数的 重写(覆盖) 派生类中有一个跟基类完全相同的虚函数 ( 派生类虚函数 基类虚函数 1.返回值类型、2.函数名字、3.参数列表 完全相同 ) ,称子类的虚函数重写了基类的虚函数。
class Person
{
public:
	virtual void BuyTicket() { cout << "买票 - 全价" << endl; }
};

class Student : public Person
{
public:
	virtual void BuyTicket() { cout << "买票 - 半价" << endl; }
};

void Func(Person& p)
{
	p.BuyTicket();
}

int main()
{
	Person ps;
	Student st;

	Func(ps);
	Func(st);

	return 0;
}

调用的是基类的虚函数还是子类的虚函数?

  • 1.不满足多态,看调用者的类型,调用这个类型的成员函数

  • 2.满足多态,看指向对象的类型,调用这个类型的成员函数

        举例1:不构成多态,未满足重写条件,调用的类型是什么就调用对应的函数。这里虽然不满足重写,但是满足隐藏(继承的知识点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值