当前位置: 首页 > news >正文

陕西网站开发织梦cms 学校网站模板

陕西网站开发,织梦cms 学校网站模板,备案期间需要关闭网站等审核,济南泰安网站建设公司多态的基本概念 多态是面向对象设计语言数据抽象和继承之外的第三个基本特征多态性(polymorphism)提供接口与具体实现之间的另一层隔膜#xff0c;从而将“what”和“how”分离开来#xff0c;多态性改善了代码的可读和组织性#xff0c;同时也使创建的程序具有可扩展性从而将“what”和“how”分离开来多态性改善了代码的可读和组织性同时也使创建的程序具有可扩展性项目不仅在最初创建时期可以扩展而且当项目在需要有新的功能时也能扩展c支持编译时多态静态多态和运行时多态动态多态运算符重载和函数重载就是编译时多态而派生类和虚函数实现运行多态静态多态和动态多态的区别就是函数地址是早绑定静态联编还是晚绑定动态联编如果函数的调用在编译阶段就可以确定函数的调用地址并产生代码就是静态多态编译时多态就是说地址是早绑定的而如果函数的调用地址不能编译不能再编译期间确定而确定而需要在运行时才能决定这这就属于晚绑定动态多态运行时多态 静态联编和动态联编 多态分类 静态多态 ------函数重载动态多态-------虚函数  继承关系 静态联编 地址早绑定编译阶段定好地址 动态联编 地址晚绑定运行时候绑定好地址 多态 父类的引用或指针指向子类对象 #includeiostreamusing namespace std;class Animal { public:virtual void speak(){cout 动物在说话 endl;} };class Cat : public Animal { public:void speak(){cout 小猫在说话 endl;}};//调用doSpeak ,speak函数的地址早就绑定好了早绑定静态联编编译阶段就确定好了地址 //参数类型为Aniaml类类型所以地址绑定为Animal类的地址 //如果想调用猫的speak不能提前绑定好函数的地址所以需要在运行时候再去确定函数地址 //动态联编写法Speak放法改为虚函数,再父类上声明虚函数发生了多态 void doSpeak(Animal animal)//Animal animal cat {animal.speak(); }//如果发生了继承的关系编译器允许进行类型转换 void test01() {Cat cat;doSpeak(cat);} //什么叫多态 //父类的引用或者指针 指向 子类对象int main() {test01();system(pause);return 0; } 注意事项 多态原理解析  必须通过基类的指针或者引用调用虚函数 被调用的函数必须是虚函数且派生类必须对基类的虚函数进行重写  Animal类里的内部结构  Cat类里的内部结构 当父类中有了虚拟函数内部结构发生了改变内部多了一个vfptr   virtual  function  pointer 虚拟函数表指针指向vftable 虚函表父类中结构  vptr   Animal::speak子类中  进行 继承  会继承 vfptr  vfptrtable构造函数中会将虚函数表指针 指向自己的虚函数表如果发生了重写会替换掉虚函数表中的原有的speak,改为 Cat::speak深入剖析内部到底如何调用((void(*)()) (*(int *)*(int *)animal))(); 虚函数重写的两个例外 1. 协变(基类与派生类虚函数返回值类型不同) 派生类重写基类虚函数时与基类虚函数返回值类型不同。即基类虚函数返回基类对象的指针或者引 用派生类虚函数返回派生类对象的指针或者引用时称为协变。 2. 析构函数的重写(基类与派生类析构函数的名字不同) 如果基类的析构函数为虚函数此时派生类析构函数只要定义无论是否加virtual关键字都与基类的 析构函数构成重写虽然基类与派生类析构函数名字不同。虽然函数名不相同看起来违背了重写的规 则其实不然这里可以理解为编译器对析构函数的名称做了特殊处理编译后析构函数的名称统一处 理成一样   #includeiostreamusing namespace std;class Animal { public:virtual void speak(){cout 动物在说话 endl;} };class Cat : public Animal { public:virtual void speak(){cout 小猫在说话 endl;} };//调用doSpeak ,speak函数的地址早就绑定好了早绑定静态联编编译阶段就确定好了地址 //参数类型为Aniaml类类型所以地址绑定为Animal类的地址 //如果想调用猫的speak不能提前绑定好函数的地址所以需要在运行时候再去确定函数地址 //动态联编写法Speak放法改为虚函数,再父类上声明虚函数发生了多态 void doSpeak(Animal animal)//Animal animal cat {animal.speak(); }//如果发生了继承的关系编译器允许进行类型转换 void test01() {Cat cat;doSpeak(cat);} void test02() {//cout sizeof(Animal) endl;//没写virtual时是1个字节//写了是4//父类指针指向子类对象发生了多态Animal * animal new Cat;//animal-speak();//*(int *)*(int *)animal函数地址((void(*)()) (*(int *)*(int *)animal))(); } //什么叫多态 //父类的引用或者指针 指向 子类对象int main() {//test01();test02();system(pause);return 0; } 重载重写重定义的对比
http://www.pierceye.com/news/915528/

相关文章:

  • 一级做爰A视频免费网站国内疫苗接种率
  • 绍兴网站公司网站制作163邮箱登录页面
  • 阐述电子商务网站的建设要求网站开发总结性报告
  • html与wordpressaso优化方法
  • 众v创业营网站开发营销活动方案策划
  • 什么网站免费做推广抚州北京网站建设
  • 响应式网站 软件做网站下载那个数据库好
  • 网站loading动画效果微信开放平台介绍
  • 山东网站建设报价网页制作与网站建设答案
  • 佛山网站搭建费用淄博刚刚发布紧急通知
  • 建站教程视频下载视频直播软件开发
  • 后缀cc的网站php网站开发实例教程代码百度云
  • 注册好域名之后怎么做个人网站如何用服务器代替空间做网站
  • 电商网站建设懂你所需网络品牌营销推广途径
  • 10大免费软件下载网站推荐购物网站域名大小
  • 网站建设项目安排计划表wordpress博客官网登陆账号密码
  • 无锡网络公司网站建设app微信公众号平平面设计培训价格
  • 免费的黄冈网站有哪些平台可以用微信支付制作网站的步骤和过程
  • 杭州的网站设计公司漂亮的网站是什么建设出来的
  • 全屏网站代码佛山专业网站建设公司推荐
  • 自己做信息网站有什么设计网站
  • 检察网站建设请示wordpress 重定向多
  • 做网站用什么服务器比较好线上推广网络公司
  • 长春营销型网站制作内蒙古建设部网站官网
  • 做家教的网站微网站可以自己做吗
  • 网站优化新闻关键词挖掘工具爱网
  • 研究生院 网站 建设广州网站建设策划
  • 企业建站找哪个公司网站退出率
  • 汕头企业建站系统高密微网站建设
  • 企业建设网站个人总结报告中山蓝图科技网站建设