成都网站建设设计

将想法与焦点和您一起共享

c语言角度看虚函数多态 虚函数实现了c++的多态性

虚函数和多态如何理解?

多态的实现主要分为静态多态和动态多态,静态多态主要是重载,在编译的时候就已经确定;动态多态是用虚函数机制实现的,在运行期间动态绑定。

10年积累的网站建设、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有彭山免费网站建设让你可以放心的选择与我们合作。

举个例子:一个父类类型的指针指向一个子类对象时候,使用父类的指针去调用子类中重写了的父类中的虚函数的时候,会调用子类重写过后的函数,在父类中声明为加了virtual关键字的函数,在子类中重写时候不需要加virtual也是虚函数。

如何用c语言实现多态

最简单的做法是在结构体里存函数指针,然后初始化结构体的时候将函数的地址赋值给它。

复杂一点的,就得按照C++的多态原理,用虚函数表(其实就是能记录函数名对应的函数地址就好)记录每种结构体的成员函数地址,然后每个结构体里多存一个虚函数表的地址。。。然后调用函数的时候查到函数地址强转成函数类型然后调用。。。这个可以自己研究一下c++的虚函数表机制。

为什么C++中,虚函数也能算为多态性的一种?到底什么多态性的是什么?

以下小程序说明了多态性

#include "stdafx.h"

#includeiostream

using namespace std;

class Base

{

public:

virtual void vf() //只有虚函数、纯虚函数才有多态性

{

cout "调用了基类函数 vf() 。" endl;

}

};

class A : public Base

{

public:

void vf()

{

cout "调用了子类 A 函数 vf() 。" endl;

}

};

class B : public Base

{

public:

void vf()

{

cout "调用了子类 B 函数 vf() 。" endl;

}

};

int _tmain(int argc, _TCHAR* argv[])

{

Base *p, bs;

A a;

B b;

p = bs; //基类指针指向基类对象

p-vf(); //调用的是基类函数 vf()

p = static_castBase*(a);//基类指针指向类 A 对象

p-vf();//调用的是类 A 函数 vf()

p = static_castBase*(b);//基类指针指向类 B 对象

p-vf();//调用的是类 B 函数 vf()

//这就是多态性

system("pause");

return 0;

}

运行结果:


当前标题:c语言角度看虚函数多态 虚函数实现了c++的多态性
本文URL:http://chengdu.cdxwcx.cn/article/dopphgg.html