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

上海专业做网站较好的公司成都新一轮疫情

上海专业做网站较好的公司,成都新一轮疫情,网站做电源,专业网站制作公司教程一、多态的基本语法 多态分为两类 静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名 动态多态: 派生类和虚函数实现运行时多态 静态多态和动态多态区别: 静态多态的函数地址早绑定 - 编译阶段确定函数地址 动态多态的函数地址晚绑定 - 运…

一、多态的基本语法

多态分为两类

静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名

动态多态: 派生类和虚函数实现运行时多态

静态多态和动态多态区别:

静态多态的函数地址早绑定 - 编译阶段确定函数地址

动态多态的函数地址晚绑定 - 运行阶段确定函数地址

#include<iostream>
using namespace std;//多态//动物类
class Animal
{
public://虚函数virtual void speak()//void speak(){cout << "动物在说话" << endl;}
};//猫类
class Cat :public Animal
{
public://重写:函数返回值类型 函数名 参数列表 完全相同称为重写void speak()//子类重写时,前面virtual可写可不写{cout << "小猫在说话" << endl;}
};//狗类
class Dog :public Animal
{
public:void speak(){cout << "小狗在说话" << endl;}
};//执行说话的函数
//地址早绑定	在编译阶段确定函数地址
//如果想执行让猫会说话,那么这个函数地址就不能提前绑定,需要在运行阶段进行绑定,地址晚绑定
//在动物类speak函数前加virtual//动态多态满足条件
//1.有继承关系
//2.子类重写父类的虚函数//动态多态使用
//父类的指针或者引用指向子类对象void doSpeak(Animal &animal)	//Animal &animal = cat
{animal.speak();
}void test1()
{Cat cat;doSpeak(cat);//out:动物在说话 加上virtual之后out:小猫在说话Dog dog;doSpeak(dog);//out:小狗在说话
}int main()
{test1();return 0;
}

总结:

多态满足条件:

1.有继承关系

2.子类重写父类中的虚函数

多态使用条件: 父类指针或引用指向子类对象

重写:函数返回值类型 函数名 参数列表 完全一致称为重写

二、多态的原理剖析

1.未发生重写时,则为继承,把父类中的所有内容都继承一份

2.发生重写时 ,子类中的虚函数表内部会替换成子类的虚函数地址

多态原理:由于写了一个虚函数,类的内部发生改变,多了一个虚函数(表)指针指向虚函数表,表的内部写的是虚函数的函数入口地址,当子类重写虚函数时,会把自身的虚函数表中的函数替换掉,替换成子类的函数,当用父类的引用指向子类对象时(上图右下角部分),由于本身创建的时Cat/Dog的子类对象,所以调用公共的speak接口时,会从子类找函数入口地址,确定什么就(Cat/Dog)输出什么(Cat/Dog).

代码部分:(只增加了一个测试函数 )

#include<iostream>
using namespace std;//多态//动物类
class Animal
{
public://虚函数virtual void speak()//void speak(){cout << "动物在说话" << endl;}
};//猫类
class Cat :public Animal
{
public://重写:函数返回值类型 函数名 参数列表 完全相同称为重写void speak()//子类重写时,前面virtual可写可不写{cout << "小猫在说话" << endl;}
};//狗类
class Dog :public Animal
{
public:void speak(){cout << "小狗在说话" << endl;}
};//执行说话的函数
//地址早绑定	在编译阶段确定函数地址
//如果想执行让猫会说话,那么这个函数地址就不能提前绑定,需要在运行阶段进行绑定,地址晚绑定
//在动物类speak函数前加virtual//动态多态满足条件
//1.有继承关系
//2.子类重写父类的虚函数//动态多态使用
//父类的指针或者引用指向子类对象void doSpeak(Animal &animal)	//Animal &animal = cat
{animal.speak();
}void test1()
{Cat cat;doSpeak(cat);//out:动物在说话 加上virtual之后out:小猫在说话Dog dog;doSpeak(dog);//out:小狗在说话
}void test2()
{cout << "sizeof Animal = " << sizeof(Animal) << endl;//未加virtual:1,加上virtual:4
}int main()
{//test1();test2();return 0;
}

http://www.jinmujx.cn/news/116846.html

相关文章:

  • 网站内容更新用什么免费b2b网站大全免费
  • 怎么做网站 高中信息技术提交百度收录
  • 网站建设_app开发seo每日
  • 合肥微信网站制作行业关键词一览表
  • discuz可以做商城网站吗aso优化的主要内容为
  • 海珠建网站多少钱企业网站快速建站
  • 做视频网站投入要多少南京 seo 价格
  • wordpress评论者头像seo型网站
  • 亚洲足球最新排名扬州网络优化推广
  • 网站建设设计千锋培训学费多少钱
  • 网站的图文链接怎么做个人网站的制作
  • 为什么菜市场不可以做网站信阳网站推广公司
  • wordpress让分类在根目录seo教程最新
  • 地方门户百度seo搜索排名
  • python课web网站开发优化设计六年级上册语文答案
  • 做网站导航栏目怎么做厦门谷歌seo公司有哪些
  • 做外贸必须知道的网站关键词优化一年多少钱
  • 为什么网站很少做全屏百度推广一级代理商名单
  • 做网站用的产品展示横幅百度代理授权查询
  • 花瓣网是仿国外那个网站做的天津seo管理平台
  • 一个公司设计网站怎么做百度一下首页登录
  • 一个人做公司管理网站郑州网站建设推广有限公司
  • 现在用什么做网站搜索引擎营销的特点有
  • 网站的策划做推广软件商店安装
  • 江北网站建设价格官网建设
  • 有没有学做家具的网站友情链接收录
  • 美女网站源码提高工作效率8个方法
  • 广州越秀区疫情浙江短视频seo优化网站
  • 福建漳州网站建设费用免费营销培训
  • 顺义网站建设推广优化seoseo搜索引擎优化论文