C语言模拟实现多态
来源:互联网 发布:js 执行 dll 编辑:程序博客网 时间:2024/06/05 11:03
本文和大家分享的主要是c语言模拟实现多态相关内容,一起来看看吧,希望对大家学习和使用这部分内容有所帮助。
一、多态的主要特点
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 }
来源:博客园
一、多态的主要特点
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 0
- C语言模拟实现多态
- C语言模拟实现多态
- C语言模拟实现C++的继承与多态
- C语言模拟实现C++中的继承和多态
- C语言模拟实现C++的继承与多态
- C语言模拟实现继承和多态
- C语言模拟实现C++继承和多态
- C语言模拟实现C++的多态
- C语言模拟实现C++的继承多态
- C语言如何模拟C++实现继承和多态
- C语言模拟实现C++中的继承和多态
- C语言模拟实现C++的继承多态
- c语言模拟实现c++的继承多态
- c语言模拟实现c++的继承和多态
- C语言模拟实现C++的继承与多态
- C语言模拟多态
- 模拟实现C语言库函数
- C语言:模拟实现memmove
- github的命令行使用
- 关于算法
- Shell脚本基础8-逻辑与
- 【kotlin从入门到深坑】系列目录
- inception 自动化sql审核
- C语言模拟实现多态
- Together项目后台开发04
- NDK探究之旅《八》——jni的开发流程规范
- POJ3046-Ant Counting
- 牛客网编程小结(三)——long long
- 算法设计作业13
- 分布式开放消息系统(RocketMQ)的原理与实践
- 在线云评测系统日志四
- Deep Learning 最优化方法之Nesterov(牛顿动量)