多态和虚函数

虚函数概念:

  • 在类的定义中,前面有virtual关键字的成员函数就是虚函数。
  • virtual关键字只用在类定义里的函数声明中,写函数体时不用。
  • 构造函数静态成员函数不能是虚函数。

多态的表现形式:

1) 派生类的指针可以赋给基类指针。

  通过基类指针可以调用基类和派生类中的同名虚函数时:指针指向哪个类的对象,就调用哪个类的虚函数。

2) 派生类的对象可以赋给基类引用

  通过基类引用调用基类和派生类中的同名虚函数时:引用的哪个类的对象,就调用哪个类的虚函数。

  • 这两种机制都叫“多态”
  • 另:除了上述机制外,虚函数与一般成员函数无区别,也可在其中调用所处类中任何一个变量和函数

例:

 1 #include<iostream>
 2 using namespace std;
 3 class A
 4 {
 5 public:
 6     int n = 0;
 7     virtual void Func();
 8     A() {}
 9 };
10 void A::Func() {
11     cout << "A::Func" << n << endl;
12 }
13 class B:public A
14 {
15 public:
16     int n = 1;
17     virtual void Func() {
18         func();
19         cout << "B::Func" << A::n << endl;
20     }
21     void func() {
22         cout << "B::func" << n << endl;
23     }
24 };
25 int main()
26 {
27     B b;
28     A a;
29     A & n = b;  //基类引用,引用派生类对象
30     A *p = &a;  //基类指针,指向基类对象
31     p->Func();  //调用基类的Func()
32     p = &b;  //指向派生类对象
33     n.Func();  //调用派生类的Func()
34     p->Func();  //调用派生类的Func()
35     return 0;
36 }

 

 

 

转载于:https://www.cnblogs.com/sakuya0000/p/8711326.html

C++的继承、多态虚函数是面向对象编程的重要概念。 继承是指一个可以从另一个继承属性和方法。子可以继承父的公有成员和保护成员,但不能继承私有成员。通过继承,子可以重用父的代码,并且可以添加自己的特定功能。继承可以实现代码的重用和层次化的设计。 多态是指同一个函数可以根据不同的对象调用不同的实现。多态可以通过虚函数来实现。虚函数是在基声明为虚拟的函数,它可以在派生被重写。当通过基指针或引用调用虚函数时,实际调用的是派生的实现。这样可以实现动态绑定,即在运行时确定调用的函数。 虚函数的原理是通过虚函数表来实现的。每个包含虚函数都有一个虚函数表,其存储了虚函数的地址。当调用虚函数时,编译器会根据对象的型在虚函数查找对应的函数地址并调用。 综上所述,C++的继承、多态虚函数是实现面向对象编程的重要机制,它们可以提高代码的灵活性和可扩展性。 #### 引用[.reference_title] - *1* *3* [C++多态虚函数虚函数表](https://blog.csdn.net/weixin_46053588/article/details/121231465)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [c++多态虚函数表内部原理实战详解](https://blog.csdn.net/bitcarmanlee/article/details/124830241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值