用 C 语言实现 C++ 的 继承 和 多态
用C++简单实现继承 && 多态(我用的是VS2013)
C++代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
//C++版
template<class T>
struct A
{virtual void F(){cout<<"A::F()"<<endl;}T a;
};
template <class T>
struct B:public A<T>//B类 公有继承 A类
{virtual void F(){cout << "B::F()" << endl;}T b;
};
void testCPlusPlus()
{A<int> a;//创建父类的对象B<int> b;//创建子类对象A<int>* p;//创建父类的指针p= &a;// 父类的指针指向父类对象//形成的条件:1.父类与子类要形成函数的重写(虚函数的重写)2.父类的指针或引用指向父类或子类的对象p->F();//调用的是父类的A::F()p = (A<int>*)&b;// 父类的指针指向子类对象p->F();//调用的是子类的B::F()
}int main()
{testCPlusPlus();system("plause");return 0;
}
C++结果
C语言模拟实现C++的 继承 与 多态
C语言代码
//C语言版
typedef void(*FUNC)();//定义一个函数指针
void FA()
{printf("A_::F()\n");
}
void FB()
{printf("B_::F()\n");
}struct A_
{FUNC F;//创建函数名int a_;
};
struct B_
{int b_;A_ a;//在B_类创建A_类的对象相当于继承了A_类的所有成员
};
void testC()
{A_ a1;//创建A_类对象B_ b1;//创建B_类对象a1.F = FA; //(函数名就相当于一个原声指针)b1.a.F = FB;A_*p;//创建A_指针p = &a1;//A_类指针指针指向A_类对象p->F();//调用的是类似父类的A_::F()p=(A_*)&b1;//A_类指针指针指向B_类对象p->F();//调用的是类似子类的B_::F()
}
int main()
{//testCPlusPlus();testC();system("pause");return 0;
}
C语言结果
总结:
C语言也可以根据他的语法规则实现C++的继承与多态。
用 C 语言实现 C++ 的 继承 和 多态相关推荐
- C语言实现封装、继承、多态
C语言实现封装.继承.多态 文章目录 C语言实现封装.继承.多态 一. 封装 二.继承 三. 多态 一. 封装 C语言中虽然没有类,但有struct和指针.我们可以在一个struct中存入数据和函数指 ...
- c语言实现c++的继承和多态
继承和多态是C++的特性,它C语言没有这个特性. C++的三大特性:继承,多态,封装. 继承:分为公有(public)继承,私有(private)继承,保护(protected)继承. 用struct ...
- c语言编程继承例子,C语言模拟实现C++的继承与多态示例
一.面向过程编程与面向对象编程的区别 众所周知,C语言是一种典型的面向过程编程语言,而C++确实在它的基础上改进的一款面向对象编程语言,那么,面向过程与面向对象到底有什么样的区别呢? [从设计方法角度 ...
- 【Python】Python语言学习:面向对象编程,类和对象,封装、继承和多态
这一周Python语言学习,记录如下. 01 面向对象编OOP 1.1 为什么学习和应用OOP? 1 OOP适合更加复杂的需求分析和项目开发. 2 OOP具有更强大的封装能力. 3 OOP相比于面向过 ...
- 【C语言】C语言实现面向对象编程之继承
00. 目录 文章目录 00. 目录 01. 概述 02. 利用结构体包含实现继承功能 03. 利用私有指针实现继承功能 04. 总结 05. 附录 01. 概述 面向对象编程具有封装性.继承性.多态 ...
- c语言错误封装,C语言实现的封装,继承,多态
提到面向对象编程,我们想到的就是封装.继承.多态,但是其实这几个特性并不是只有面向对象语言才能实现,面向过程的C语言也是可以支持实现这三个特性的,下面我们来具体看下 封装1 2 3 4// point ...
- Java语言程序设计(基础篇) 第十一章 继承和多态
第十一章 继承和多态 11.1 引言 面向对象的编程允许你从已经存在的类中定义新的类,这称为继承. 11.2 父类和子类 1.继承使得你可以定义一个通用的类(既父类),之后扩充该类为一个更加特定的类( ...
- go语言基础(四):继承、方法
面向对象 在讲解具体面向对象编程之前,先说一下面向过程编程.我们前面学习都是面向过程的一种编程思想,接下来可以从生活中理解面向过程: 如果我们自己来修汽车,应该有哪些步骤呢? 第一步:找工具 第二步: ...
- java只允许单一继承_问题:Java语言只允许单继承,指每个类只能有一个 ( )
问题:Java语言只允许单继承,指每个类只能有一个 ( ) 更多相关问题 用List命令显示表文件中的当前记录的命令格式是________. WHERE子句的条件表达式中,可以匹配0个到多个字符的通配 ...
最新文章
- 怎么在Linux中telnet服务器,怎么利用Telnet连接Linux服务器
- python代码示例下载-Python下载网易云歌单歌曲的示例代码
- 深入理解volatile
- 学习进度条(第十五周)
- UITableViewCell中cell重用机制导致内容重复的方法
- 格式化字符串漏洞利用 五、爆破
- iphone使用linux命令apt-get也没有问题
- 标准h5的定位_不但亲民还安全 红旗H5车门/防撞梁拆解
- iPhone开发--NSDate操作(转)
- Atitit 信息安全体系 资料书籍表 1. 《信息安全原理与技术	2 1.1. 第2章 工具箱: 鉴别、 访问控制与加密	2 1.2. 第3章 程序和编程 漏洞 木马 病毒	3 1.3. We
- 计算机485通讯原理图,485通讯接线图.pdf
- 使用OpenSSL自建CA及颁发证书、吊销证书
- 你天天看手机,手机也在看你
- NOI 1818:红与黑(C++)
- day08 系统篇端口扫描CDN服务负载均衡WAF防火墙
- linux添加java环境变量
- oracle调优 oracle培训
- Hadoop实战问题记录
- strtok是分割字符串,查找中间最长的单元
- 蓝鲸平台单机部署增加一台 APPT (测试服务器)
热门文章
- 基于html5 css3风车乐栈在线音乐播放网站源码 大学生毕业设计源码 在线音乐网站HTML HTML5期末大作业 web课程设计网页规划与设计
- 使用百度EasyDL定制化图像识别(二)
- Android Studio 4.0 最新进展
- 测国外服务器速度的网站,来,测一下你国外高防服务器网站的打开速度
- 安卓手机迁移到ios设备(音乐,视频,联系人,短信,图片,备忘录等)
- WebApi跨域问题解决方案:CPRS
- 2021年七夕送什么礼物走心?当贝投影F3怎么样?
- 使用pandas对excel排序
- win7怎么找回回收站里删除的文件?
- java引入css没效果,为什么我的css文件导入不起作用?