c++-多态机制

一、多态的基本概念 多态(Polymorphism)就是多种状态,在C++中只“一个接口,多个实现方法”。

二、多态的两种方式 C++支持两种多态性:编译时多态性,运行时多态性。 A.编译时多态,通过函数重载实现,静态绑定 B.运行时多态,通过虚函数实现,动态绑定

三、虚函数(virtual) A.非虚函数,调用的函数是由用于调用函数的句柄(指针或引用)类型决定,而不是由句柄所指向的对象的类型决定。 B.虚函数,调用哪个类的虚函数就是由句柄所指向的对象的类型所决定,而非句柄的类型。

四、虚函数实现机制 A.数据结构,virtual函数表,含有虚函数的类,编译器编译时都会为这个类创建一个virtual函数表,每次调用该类的virtual函数时,运行程序都会根据virtual函数表选择正确的函数实现。 B.实现机制,三级指针:virtual函数表中指向函数具体实现的指针;含virtual函数的类的对象指向该类的virtual函数表的指针;用于调用virtual函数的对象句柄。

五、虚函数与析构函数 基类的析构函数一般都是虚函数,这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用,防止在析构时只析构基类而不析构派生类的状况发生。

六、代码例子说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include
class A
{
public:
void foo()
{
printf(“1\n”);
}
virtual void fun()
{
printf(“2\n”);
}
};
class B : public A
{
public:
void foo()
{
printf(“3\n”);
}
void fun()
{
printf(“4\n”);
}
};
int main(void)
{
A a;
B b;
A *p = &a;
p->foo();
p->fun();
p = &b;
p->foo();
p->fun();
return 0;
}

第一个p->foo()和p->fuu()输出结果就是1、2;第二个输出结果就是1、4。

  • 版权声明: 本博客所有文章,未经许可,任何单位及个人不得做营利性使用!转载请标明出处!如有侵权请联系作者。
  • Copyrights © 2015-2020 翟天野

请我喝杯咖啡吧~