这个问题主要考察的是C和C++的区别,以及C++中继承和多态的概念。

C和C++的区别
C语言是面向过程的语言,而C++是面向对象的过程。
什么是面向对象和面向过程?
面向过程就是分析解决问题的步骤,然后用函数把这些步骤一步一步的进行实现,在使用的时候进行一一调用就行了,注重的是对于过程的分析。面向对象则是把构成问题的事进行分成各个对象,建立对象的目的也不仅仅是完成这一个个步骤,而是描述各个问题在解决的过程中所发生的行为。
面向对象和面向过程的区别?
面向对象的三大特征
封装:
对于封装来说就是数据与具体操作实现的代码都放在某个对象的内部,使这些代码的具体细节不被外界发现,只留下一些接口供外部来使用,而不能一任何的形式来对象内部的实现。使用封装能够隐藏具体的实现的细节,使代码更加易于维护并且保证了系统的安全性。
继承:
继承机制是面向对象程序设计使代码进行复用的最重要的手段,他允许程序员在保证类原有类特性的基础上进行扩展来增加功能。这样新产生的类就被称为派生类,继承就可以表现面向对象机制的的层次结构。
多态:
多态简单点说就是“一个接口,多种实现”,就是同一种事物表现出的多种形态。多态在面向对象语言中是指:接口多种的不同实现方式。也就是复用相同接口,实现不同操作。
C++多态支持两种多态性,编译时多态和运行时多态。编译时多态是通过重载函数来实现的,运行时多态是通过虚函数来实现的。静态多态:编译器在编译期间完成,编译器根据函数实参的类型(可能会隐式类型转换),可推断出要调用哪个函数,如果有对应的函数就调用相应的函数,否则就报一个编译错误。动态多态:在函数执行期间(非编译期)判断所引用对象的实际类型,根据实际类型的调用相应的方法。使用virtual关键字修饰类的成员函数,指明该函数为虚函数,派生类需要重新实现,编译器将实现动态绑定。
动态多态实现的条件:
1>、使用场景:父类的指针或者引用指向父类或者子类的对象(由赋值兼容规则决定);
2>、实现多态的两个条件:虚函数的重写;父类的指针或者引用调用重写的虚函数。
3>、若父类中的成员函数加上virtual关键字,则子类中重写的该函数默认virtual,可以不指定,但是一般加上;
重写:子类重写父类的虚函数,要求函数名称,函数参数,返回值完全一样(协变除外);
总的来说:封装可以隐藏实现细节包括包含私有成员,使得代码模块增加安全指数;继承可以扩展已存在的模块,为了增加代码的复用性;多态则是为了保证类在继承和派生的时候,类的实例被正确调用,实现了接口的重用
C模拟实现多态
C++中的多态
我们知道的是在C++中会维护一张虚函数表,根据赋值兼容规则,我们知道父类的指针或者引用是可以指向子类对象的。如果一个父类的指针或者引用调用父类的虚函数则该父类的指针会在自己的虚函数表中查找自己的函数地址,如果该父类对象的指针或者引用指向的是子类的对象,而且该子类已经重写了父类的虚函数,则该指针会调用子类的已经重写的虚函数。
//c++中的多态
class A
{
public:
virtual void fun()//虚函数实现
{
cout << "Base A::fun() " << endl;
}
};
class B:public A
{
public:
virtual void fun()//虚函数实现,子类中virtual关键字可以没有
{
cout << "Derived B::fun() " << endl;
}
};
void Test1()
{
A a;//基类对象
B b;//派生类对象
A* pa = &a;//父类指针指向父类对象
pa->fun();//调用父类的函数
pa = &b; //父类指针指向子类对象,多态实现
pa->fun();//调用派生类同名函数
}
c语言实现多态
我们知道在C语言中是没有class类这个概念的,但是有struct结构体,我们可以考虑使用struct来模拟;但是在C语言的结构体内部是没有成员函数的,如果实现这个父结构体和子结构体共有的函数呢?我们可以考虑使用函数指针来模拟。但是这样处理存在一个缺陷就是:父子各自的函数指针之间指向的不是类似C++中维护的虚函数表而是一块物理内存,如果模拟的函数过多的话就会不容易维护了。
//C实现动态,用到函数指针
typedef void(*FUN)();//重定义一个函数指针类型
//父类
struct Base
{
FUN _f;
};
//子类
struct Derived
{
Base _b;//在子类中定义一个基类的对象即可实现对父类的继承
};
void FunB()
{
printf("%s\n", "Base::fun()");
}
void FunD()
{
printf("%s\n", "Derived::fun()");
}
void Test2()
{
Base b;//父类对象
Derived d;//子类对象
b._f = FunB;//父类对象调用父类同名函数
d._b._f = FunD;//子类调用子类的同名函数
Base *pb = &b;//父类指针指向父类对象
pb->_f();
pb = (Base *)&d;//让父类指针指向子类的对象,由于类型不匹配所以要进行强转
pb->_f();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# c语言实现继承和多态
# c语言实现继承
# c语言实现多态
# C/C++使用C语言实现多态
# C语言实现C++继承和多态的代码分享
# C语言模拟实现C++的继承与多态示例
# C/C++多态深入探究原理
# 子类
# 多态
# 面向对象
# 重写
# 的是
# 自己的
# 类中
# 派生类
# 则是
# 复用
# 我们可以
# 来实现
# 则该
# 这一
# 就会
# 也不
# 是在
# 放在
# 基础上
# 是指
相关文章:
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
已有域名和空间,如何快速搭建网站?
创业网站制作流程,创业网站可靠吗?
建站10G流量真的够用吗?如何应对访问高峰?
招商网站制作流程,网站招商广告语?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
深圳网站制作的公司有哪些,dido官方网站?
清除minerd进程的简单方法
建站之星导航菜单设置与功能模块配置全攻略
专业网站建设制作报价,网页设计制作要考什么证?
如何设置并定期更换建站之星安全管理员密码?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
如何在云虚拟主机上快速搭建个人网站?
如何快速打造个性化非模板自助建站?
如何通过西部建站助手安装IIS服务器?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Swift中swift中的switch 语句
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何挑选最适合建站的高性能VPS主机?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
建站主机核心功能解析:服务器选择与网站搭建流程指南
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
网站企业制作流程,用什么语言做企业网站比较好?
宿州网站制作公司兴策,安徽省低保查询网站?
网站制作话术技巧,网站推广做的好怎么话术?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
如何零成本快速生成个人自助网站?
建站主机系统SEO优化与智能配置核心关键词操作指南
网页设计网站制作软件,microsoft office哪个可以创建网页?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
高防服务器租用指南:配置选择与快速部署攻略
微课制作网站有哪些,微课网怎么进?
高端建站三要素:定制模板、企业官网与响应式设计优化
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
网站微信制作软件,如何制作微信链接?
淘宝制作网站有哪些,淘宝网官网主页?
网站网页制作专业公司,怎样制作自己的网页?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
网站图片在线制作软件,怎么在图片上做链接?
制作网站怎么制作,*游戏网站怎么搭建?
如何在VPS电脑上快速搭建网站?
如何在IIS中配置站点IP、端口及主机头?
建站主机是否属于云主机类型?
如何通过万网虚拟主机快速搭建网站?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
*请认真填写需求信息,我们会在24小时内与您取得联系。