多态详细讲解(简单实现买票系统模拟,覆盖/重定义,多态原理,虚表)

本文详细介绍了C++中的多态概念,通过一个买票系统的模拟实现来阐述覆盖与重定义。文章讨论了final和override关键字,以及重载、隐藏、重定义的区别。此外,还深入探讨了抽象类和多态的实现原理,包括虚函数表的存在位置和作用,以及动态绑定和静态绑定的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 多态的概念

多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态,比如我们买火车票,学生买票和军人买票和成年人买票的价格不一样这就是多态

2.买票系统模拟实现

在实现前先了解一下覆盖,// 虚函数 + 函数名/参数/返回值 相同等于 重写或者覆盖

class Person {
   
public:

	// 虚函数
	virtual void BuyTicket() {
    cout  << "Person:买票-全价 100¥" << endl; }

protected:
};

class Student : public Person {
   
public:

	// 虚函数 + 函数名/参数/返回值 -》 重写/覆盖
	virtual void BuyTicket() {
    cout  << " Student:买票-半价 50 ¥" << endl; }
};

class Soldier : public Person {
   
public:

	// 虚函数 + 函数名/参数/返回值 -》 重写/覆盖
	virtual void BuyTicket() {
    cout << " Soldier:优先买预留票-88折 88 ¥" << endl; }
};

void Pay(Person* ptr)
{
   
	ptr->BuyTicket();
}

int main()
{
   
	Person p;
	Student s;
	Soldier st;
	int option = 0;
	cout << "=======================================" << endl;
	do 
	{
   
		cout << "请选择身份:";
		cout << "1、普通人 2、学生 3、军人" << endl;
		cin >> option;
		switch (option)
		{
   
		case 1:
		{
   
			p.BuyTicket();
			break;
		}
		case 2:
		{
   
			s.BuyTicket();
			break;
		}
		case 3:
		{
   
			st.BuyTicket();
			break;
		}
		default:
			cout << "输入错误,请重新输入" << endl;
			break;
		}
		cout << "=======================================" << endl;
	} while (option != -1);

	return 0;
}

运行结果
在这里插入图片描述
但是这个没有实名制,就是名字,身份证之类的都没有
再写之前了解下多态
多态两个要求:
1、子类虚函数重写的父类虚函数 (重写:三同(函数名/参数/返回值)+虚函数)
2、父类指针或者引用去调用虚函数。

#include<iostream>
using namespace std;

class Person 
{
   
public:
	Person(const char* name)
		:_name(name)
	{
   

	}
	// 虚函数
	virtual void BuyTicket() {
    cout << _name << "Person:买票-全价 100¥" << endl; }

protected
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值