【C++深度探索】全面解析多态性机制(一)
hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹
💥个人主页:大耳朵土土垚的博客
💥 所属专栏:C++入门至进阶
这里将会不定期更新有关C++的内容,欢迎大家多多点赞关注收藏💖💖
目录
- 1.什么是多态
- 2.虚函数的定义与重写
- 3.多态的实现
- 4.虚函数重写的两个例外
- 5.C++11 override 和 final
- 6.重载、覆盖(重写)、隐藏(重定义)的对比
- 7.抽象类
- 8.结语
1.什么是多态
在C++中,多态(Polymorphism)是指通过基类指针或引用来访问派生类对象的一种机制。简单来说,它允许我们在基类类型的指针或引用上调用派生类对象的成员函数。
通俗来说,就是多种形态,或者说完成某个行为时,当不同的对象去完成会产生出不同的状态。
例如:买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票。不同的对象去完成同一个行为——买票,会产生不同的状态。
在代码中的具体体现则依赖于虚函数(Virtual Function)。在基类中,可以将某个成员函数声明为虚函数,而在派生类中重写该函数。通过使用基类指针或引用指向派生类对象,并调用该虚函数,实际上在运行时会根据对象的实际类型调用合适的函数。
2.虚函数的定义与重写
虚函数:即被virtual修饰的类成员函数称为虚函数
class Person { public: //虚函数 virtual void BuyTicket() { cout public: //虚函数 virtual void BuyTicket() { cout public: //虚函数重写 virtual void BuyTicket() { cout public: virtual void BuyTicket() { cout public: //条件二:调用的是虚函数并且派生类对虚函数进行重写 virtual void BuyTicket() { cout //条件一:基类的引用或指针调用虚函数 p.BuyTicket(); } int main() { Person ps; Student st; Func(ps); Func(st); return 0; } }; 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* f() { return new Person; }//基类虚函数返回值类型为基类指针或引用 }; class Student : public Person { public: virtual Student* f() { return new Student; }//派生类虚函数返回值类型为派生类指针或引用 }; public: virtual ~Person() { cout public: //构成多态条件二:基类虚函数并且派生类虚函数重写 virtual ~Student() { cout //构成多态条件一:使用基类指针或引用调用虚函数(这里是析构函数) Person* p1 = new Person; Person* p2 = new Student; delete p1; delete p2; return 0; } public: ~Person() { cout public: ~Student() { cout Person* p1 = new Person; Person* p2 = new Student; delete p1; delete p2; return 0; } public: ~Person() { cout public: int* ptr = new int[10];//动态开辟空间 ~Student() { delete[] ptr;//释放空间 cout Person* p1 = new Person; Person* p2 = new Student; delete p1; delete p2; return 0; } public: virtual void BuyTicket() final { cout public: virtual void BuyTicket() { cout public: virtual void BuyTicket(){ cout public: virtual void BuyTicket() override{ cout public: virtual void BuyTicket() = 0; }; class Student : public Person { public: virtual void BuyTicket() { cout
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。