• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C语言模拟实现多态

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、多态的主要特点

1、继承体系下。继承:是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性 和行为,并能扩展新的能力,已有类被称为父类/基类,新增加的类被称作子类/派生类。 

2、子类对父类的虚函数进行重写。

3、虚表。

在面向对象语言中,接口的多种不同现方式即为多态。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单说就是允许基类的指针指向子类的对象。 

二、代码实现

1、C++中的继承与多态

 1 class Base
 2 {
 3 public:
 4     virtual void fun() {} //基类函数声明为虚函数
 5     int B1;
 6 };
 7 class Derived :public Base //Derived类公有继承Base类
 8 {
 9 public:
10     virtual void fun() { //函数重写,此时基类函数可以声明为虚函数,也可以不声明
11         cout << "D1.fun" << endl;
12     }
13     int D1;
14 };
15 int main(){
16     Base b1; //创建父类对象
17     Derived d1;//创建子类对象
18 
19     Base *p1 = (Base *)&d1;//定义一个父类指针,并通过父类指针访问子类成员
20     p1->fun();
21 
22     Derived *p2 = dynamic_cast<Derived*> (&b1); //dynamic_cast用于将一个父类对象的指针转换为子类对象的指针或引 用( 动态转换)
23     p2->fun();  
24 
25     getchar();
26     return 0;
27 }

2. C语言实现C++的继承与多态

 1 typedef void(*FUNC)(); //定义一个函数指针来实现对成员函数的继承
 2 struct _Base  //父类
 3 {
 4     FUNC _fun;//由于C语言中结构体不能包含函数,故借用函数指针在外面实现
 5     int _B1;
 6 };
 7 struct _Derived//子类
 8 {
 9     _Base _b1;//在子类中定义一个基类的对象即可实现对父类的继承
10     int _D1;
11 };
12 void fb_()       //父类的同名函数
13 {
14     printf("_b1:_fun()\n");
15 }
16 void fd_()       //子类的同名函数
17 {
18     printf("_d1:_fun()\n");
19 }
20 int main() {
21     _Base _b1;//定义一个父类对象_b1
22     _Derived _d1;定义一个子类对象_d1
23 
24     _b1._fun = fb_;//父类的对象调用父类的同名函数
25     _d1._b1._fun = fd_;//子类的对象调用子类的同名函数
26 
27     _Base *_p1 = &_b1;//定义一个父类指针指向父类的对象
28     _p1-> _fun(); //调用父类的同名函数
29 
30     _p1 = (_Base *)&_d1;//让父类指针指向子类的对象,由于类型不匹配所以要进行强转
31     _p1->_fun(); //调用子类的同名函数
32 
33     getchar();
34     return 0;
35 }

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
CORS跨域请求C#版发布时间:2022-07-13
下一篇:
观察者Observer模式C++实现发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap