做房产的一般用哪个网站,网站首页制作过程,石家庄新闻广播电台,江苏网页制作报价文章目录 1 静态多态实现原理 2 动态多态实现原理 code 1 静态多态
实现
函数重载#xff0c;在编译器确定
函数重载的条件#xff1a;
函数名相同参数个数不同#xff0c;参数的类型不同#xff0c;参数顺序不同返回值类型#xff0c;不作为重载的标准
原理
函数名… 文章目录 1 静态多态实现原理 2 动态多态实现原理 code 1 静态多态
实现
函数重载在编译器确定
函数重载的条件
函数名相同参数个数不同参数的类型不同参数顺序不同返回值类型不作为重载的标准
原理
函数名修饰替换进行命名倾轧
函数执行过程
预处理 把头文件的函数声明拷贝到源文件编译 语法分析同时进行函数汇总汇编 生成函数名到函数地址的映射链接 加那个多个文件的符号表汇总合并
2 动态多态
实现
多态实现条件
父类中有虚函数即共用接口子类 override(覆写)父类中的虚函数通过己被子类对象赋值的父类指引用 或子类对象地址赋值给父类指针调用共用接口
虚函数声明
class 类名
{virtual 函数声明;
}纯虚函数
纯虚函数只有声明没有实现被“初始化”为 0含有纯虚函数的类称为 Abstract Base Class(抽象基类)不可实例
声明
class 类名
{virtual 函数声明 0;
}原理
若类使用虚函数则会为类生成虚函数表一维数组存放了虚函数表的地址类对象构造时会初始化虚函数表的指针
code
#include iostream
using namespace std;class Shape
{
public:Shape(int x,int y):_x(x),_y(y){}virtual void draw(){coutdraw Shap ;coutstart (_x,_y) endl;}protected:int _x;int _y;
};class Circle:public Shape
{
public:Circle(int x, int y,int r):Shape(x,y),_r(r){}void draw(){coutdraw Circle ;coutstart (_x,_y) ;coutraduis r _rendl;}private:int _r;
};int main()
{Shape s(3,5);Circle c(1,2,4);// 不能实现多态s c;s.draw();// 子类对象赋值为父类引用实现多态Shape rs c;rs.draw();//子类对象地址赋值给父类指针实现多态Shape *ps c;ps-draw();return 0;
}运行结果 draw Shap start (1,2) draw Circle start (1,2) raduis r 4 draw Circle start (1,2) raduis r 4