行业知识
【c++】全面理解C++多态:虚函数表深度剖析与实践应用
2026-10-31 07:02:31
来源:互联网转载
个人主页:Quitecoder
专栏:c++笔记仓
朋友们大家好,通过本篇文章,来详细理解多态的内容
目录
- `1.多态的定义及实现`
- `1.1多态的构成条件`
- `1.2虚函数的重写`
- `1.3 C++11 override 和 final`
- `1.4重载、覆盖(重写)、隐藏(重定义)的对比`
- `2.多态的原理`
- `2.1虚函数表`
- `2.2多态的原理`
- `2.3单继承的虚函数表`
- `3.抽象类`
- `3.1接口继承与实现继承`
- `3.2静态多态与动态多态`
- `3.3例题`
- `4.多继承中的虚函数表`
- `4.1菱形继承和菱形虚拟继承`
- `4.2菱形虚拟继承:`
- `5.虚表的存储位置`
1.多态的定义及实现
多态的基本概念:多态指的是对象可以通过指向它们的基类的引用或指针被操纵,同时还能保持其派生类部分的特性。将派生类对象当作基类对象来对待,这允许不同类的对象响应相同的消息以不同的方式,换句话说,同一个接口,使用不同的实例而执行不同操作
比如买票,普通人买票时,是全价买票;学生买票时,是半价买票
class Person {public:virtual void BuyTicket() { cout public:virtual void BuyTicket() { cout p.BuyTicket();}int main(){Person ps;Student st;Func(ps);Func(st);return 0;}p.BuyTicket();}public:virtual void BuyTicket() { cout public:virtual void BuyTicket() { cout public:virtual void BuyTicket() { cout };class B : public A {};class Person {public:virtual A* f() { return new A; }};class Student : public Person {public:virtual B* f() { return new B; }};public:virtual ~Person() { cout public:virtual ~Student() { cout Person* p1 = new Person;Person* p2 = new Student;delete p1;delete p2;return 0;} cout cout public:virtual void BuyTicket() { cout public:void BuyTicket() { cout public:virtual void Drive() final {}};class Benz :public Car{public:virtual void Drive() { cout public:virtual void Drive() {}};class Benz :public Car {public:virtual void Drive() { cout public:virtual void Drive() {}};class Benz :public Car {public:virtual void Drive() override { cout public: void func() void func(int i) void func(double d) };public: virtual void func() { /* ... */ }};class Derived : public Base {public: void func() override { /* ... */ } // 覆盖(重写)基类中的func};public: void func() { /* ... */ } void func(int i) { /* ... */ }};class Derived : public Base {public: void func(double d) { /* ... */ } // 隐藏了基类的func() // 注意:现在Base的func()和func(int)都被隐藏,只能通过Derived的对象访问新的func(double)};public:virtual void Func1(){cout public:virtual void BuyTicket() { cout public:virtual void BuyTicket() { cout p-BuyTicket();}int main(){Person Mike;Func(&Mike);Student Johnson;Func(&Johnson);return 0;}public:void BuyTicket() { cout public:virtual void func1() { cout cout public:virtual void func1() { cout cout cout Base b;Derive d;return 0;}for (size_t i = 0; i
上一篇:WordPress链接生成全攻略,轻松创建高质量链接!
下一篇:au舌音怎么调?