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

从化门户网站建设西安网站建设公司十强

从化门户网站建设,西安网站建设公司十强,网站开发公司的职责,抖音分享小程序怎么赚钱派生类可以使用基类的方法而不做任何修改&#xff0c;但我们并不是总是希望同一个方法在基类和派生类中的行为是相同的。我们可以借助虚函数实现多态公有继承。 虚函数 声明与定义 下面举例说明虚函数 #ifndef BRASS_H #define BRASS_H #include <string> class Brass…

        派生类可以使用基类的方法而不做任何修改,但我们并不是总是希望同一个方法在基类和派生类中的行为是相同的。我们可以借助虚函数实现多态公有继承。

虚函数

声明与定义

        下面举例说明虚函数

#ifndef BRASS_H
#define BRASS_H
#include <string>
class Brass
{
private:std::string fullName;long acctNUm;double balance;
public:...virtual void ViewAcct() const;//基类添加virtual关键字声明虚函数virtual ~Brass() {}//虚函数只能是成员函数,友元不行
};
class BrassPlus:public Brass
{
private:double maxLoan;dohble rate;double owesBank;
public:...virtual void ViewAcct() const;//基类中已声明虚函数,这里的virtual是可选的
}

        声明了虚函数之后,程序将根据调用方法的对象类型来确定使用哪个版本。

Brass dom;
BrassPlus dot;
dom.ViewAcct();//使用Brass版本
dot.ViewAcct();//使用BrassPlus版本

        特别地,如果方法是通过引用或指针而不是对象调用的,程序将根据引用或指针指向的对象的类型来选择方法(前提是虚函数,否则根据引用或指针的类型)。

注意:

  1. 在函数定义部分无需使用virtual关键字标明虚函数。
  2. 含继承关系时,应尽量将析构函数设置为虚函数。这样能保证无论指针指向的是基类还是派生类,都会调用对象对于类型的析构函数,避免错误析构。
  3. 在派生类中重新定义(参数列表不同)虚函数将隐藏基类的所有同名方法。 (但特殊地,允许返回类型是基类引用或指针时,可修改为指向派生类的引用或指针)
  4. 如果基类声明被重载,则应在派生类中重新定义所有的接力版本,未定义的版本在派生类中将被隐藏。
静态联编和动态联编

        将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编。在C语言中这项任务很简单,因为每个函数名都对应一个不同的函数。但C++由于函数重载等特性,这项任务变得更复杂。C/C++都能在编译过程中进行联编,这被称为静态联编

        但虚函数使这项工作变得复杂,因为使用哪个函数无法在编译过程中确定,这取决于对象的类型。所以编译器必须生成在程序运行时选择正确的虚方法代码,这被称为动态联编

BrassPlus ophelia;
Brass*bp;
bp=&ophelia;
bp->ViewAcct();//执行哪个版本?

        正如前介绍,若ViewAcct()不是虚函数,则将根据指针类型调用Brass::ViewAcct()。指针在编译时已知,因此在编译时会将ViewAcct()关联到Brass::ViewAcct。总之编译器对非虚函数使用静态联编。

        若ViewAcct()是虚函数,则将根据对象类型调用BrassPlus::ViewAcct()。但在运行时才能确定对象类型,所以是动态联编。

虚函数工作原理

        通常,编译器处理虚函数的方法是:给每一个对象添加一个隐藏成员。隐藏成员包含了一个指向函数地址数组的指针,被称为虚函数表。每声明一个虚函数都将向虚函数表中添加一个函数地址(若派生类中重新定义基类虚函数则对应函数地址处于新定义位置)。调用虚函数时将按照以下四个步骤:

  1. 获悉对象成员中指向虚函数表的指针的地址。
  2. 前往该指针指向地址的虚函数表。
  3. 获悉表中对应函数的地址。
  4. 前往函数定义地址并执行这里的函数。

纯虚函数

        并非所有继承都使用is-a规则。例如,我们知道圆是特殊的椭圆,如果我们从椭圆派生到圆就会使得派生类多出许多无用的成员,导致信息冗余。于是我们可以从椭圆和圆中抽象出它们的共性,将这些特性放到一个抽象类(ABC)中,从抽象类分别派生出圆和椭圆。

        抽象类中,通过将成员函数声明为纯虚类来指出其在各个派生类中的实现不一定相同,相同的则使用非纯虚函数。

class BaseEllipse
{
private:double x;double y;//(椭)圆心坐标...
public:BaseEllipse(double x0=0,double y0=0):x(x0),y(y0){}virtual ~BaseEllipse(){}//虚析构函数void Move(int nx,ny){x=nx,;y=ny}//派生类实现相同的函数不设为纯虚函数virtual double Area() const=0;//派生类实现不同的函数设置为纯虚函数...
}

        当类声明中包含纯虚函数时,表明这是一个抽象类,只能作为基类且不能创建该类的对象。纯虚函数是否被定义是可选的,若被定义了也可在派生类中使用作用域解析运算符::进行访问。

http://www.dtcms.com/wzjs/56554.html

相关文章:

  • 青岛独立站开发公司怎样在网上做宣传
  • 极速建站系统开发友情链接检测
  • 搜狐做app的网站网页关键词排名优化
  • 专业网站建设公司推荐企业网站优化关键词
  • 龙信建设集团有限公司网站怎么联系百度客服
  • 党的建设 网站windows优化大师和360哪个好
  • 河北建站公司海外品牌推广
  • 商务网站开发流程有三个阶段北京百度推广客服电话多少
  • 做婚礼效果图的网站有哪些优化大师是干什么的
  • 投票网站制作重庆seo优
  • 购物网站建设方案书营销方案100个软文
  • js获取网站访客mac南京做网站的公司
  • 做网站设计的长宽一般是多少钱网络营销公司有哪些公司
  • 西海岸城市建设局网站小广告图片
  • 网上做网站的靠谱吗郑州网
  • 企业网站模板演示谁有推荐的网址
  • 深圳市专业的做网站游戏推广拉人渠道
  • 毕业设计论文代做网站广州seo网站
  • 局域网网站建设现在有哪些免费推广平台
  • 厦门网站建设团队网站打开速度优化
  • 做效果图的外包网站页面优化的方法
  • 关于建设校园网站的毕业论文长春视频剪辑培训机构
  • 网站的详情页面设计注册域名费用一般多少钱
  • 上海网站建设高端定制百度广告投放价格表
  • 怎样才能制作网站软件开发
  • 提高网站收录的方法手机端百度收录入口
  • 百度网站收录更新青岛seo青岛黑八网络最强
  • 营销型企业网站源码西安seo网站推广优化
  • 无锡优化网站价格微信广告投放推广平台多少费用
  • 网站建设源代码百度推广优化工具