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

外贸推广公司排名百度seo关键词排名

外贸推广公司排名,百度seo关键词排名,做软件的声称发现网站漏洞,陕西建设网网抽象类是一种特殊的类,它为一个类族提供统一的操作界面。抽象类是为了抽象和设计的目的而建立的。可以说,建立抽象类,就是为了通过它多态地使用其中的成员函数。抽象类处于类层次的上层,一个抽象类自身无法实例化,也就…

抽象类是一种特殊的类,它为一个类族提供统一的操作界面。抽象类是为了抽象和设计的目的而建立的。可以说,建立抽象类,就是为了通过它多态地使用其中的成员函数。抽象类处于类层次的上层,一个抽象类自身无法实例化,也就是说我们无法定义一个抽象类的对象,只能提供继承机制,生成抽象类的非抽象派生类,然后再实例化。

1.纯虚函数

在基类中声明和不同的派生类中具有相同原型的函数,并将它们声明为虚函数,此时,派生类中和基类中名字相同的函数就会被覆盖掉,然后通过基类的指针调用这些函数时,派生类的相应函数将被实际调用。然而,基类并不知道该如何处理通过基类的指针调用来的派生类函数,无法给出有意义的实现。对于这种在基类中无法实现的函数,可以在基类中只说明函数原型来规定整个类族的统一接口形式,而在派生类中再给出这些函数的实现,纯虚函数来实现这一功能。

纯虚函数是一个在基类中声明的虚函数,它在该基类中没有定义具体的操作内容,要求各派生类根据实际需求给出各自的定义。

纯虚函数的声明格式为:

virtual 函数类型 函数名(参数表)=0;

实际上,它与一般虚函数成员的原型在书写格式上的不同就在于后面加了“=0”。

声明为纯虚函数之后,基类中就可以不再给出函数的实现部分。纯虚函数的函数体由派生类给出。

【注意】

(1)基类中仍然允许对纯虚函数给出实现,但即使给出实现,也必须由派生类覆盖,否则无法实例化。例如:

#include<iostream>
using namespace std;class B
{
public:virtual void fun() = 0//纯虚函数在基类中实现{cout << "显示基类B" << endl;}
};class D :public B
{
public:virtual void fun() = 0;
};int main()
{D d;d.fun();return 0;
}

以上代码编译错误,原因是:
在这里插入图片描述
将代码修改之后如下:

class B
{
public:virtual void fun() = 0//派生类对基类中的纯虚函数进行覆盖{cout << "显示基类B" << endl;}
};class D :public B
{
public:virtual void fun(){cout << "显示派生类D" << endl;}
};int main()
{D d;d.fun();return 0;
}

运行结果:
在这里插入图片描述

(2)在基类中对纯虚函数定义的函数体的调用,必须通过“基类名::函数名(参数表)”的形式。

(3)如果将基类析构函数声明为纯虚函数,必须给出它的实现,因为派生类的析构函数体执行完后需要调用基类的纯虚函数。

class B
{
public:B(){cout << "基类B的构造函数" << endl;}virtual~B() = 0//声明B类的析构函数为纯虚函数并实现{cout << "基类B的析构函数" << endl;}virtual void fun() = 0;//声明fun为纯虚函数
};class D :public B
{
public:D(){cout << "派生类D的构造函数" << endl;}virtual ~D(){cout << "派生类D的析构函数" << endl;}virtual void fun(){cout << "显示派生类D" << endl;}
};int main()
{D d;return 0;
}

运行结果:
在这里插入图片描述
(4)纯虚函数不同于函数体为空的虚函数:纯虚函数根本就没有函数体,而空的虚函数的函数体为空;纯虚函数所在的类是抽象类,不能直接进行实例化,而函数体为空的虚函数所在的类是可以实例化的。它们共同的特点是都可以派生出新的类,然后在新的类中给出虚函数新的实现,而且这种新的实现具有多态特征。

2.抽象类

带有纯虚函数的类是抽象类。 抽象类的主要作用是通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态特性。抽象类声明了一个类族派生类的共同接口,而接口的完整实现,即纯虚函数的函数体,需要派生类自己定义。

抽象类派生出新的类之后,如果派生类给出所有纯虚函数的函数实现,这个派生类就可以自己定义对象,因而不再是抽象类;反之,如果派生类没有给出全部纯虚函数的实现,这时派生类仍然是一个抽象类。

抽象类不能实例化,即不能定义一个抽象类的对象,但是可以定义一个抽象类的指针和引用。通过指针和引用,就可以指向并访问派生类的对象,进而访问派生类的成员,这种访问具有多态特征。

【例】抽象类举例

class A//基类A定义
{
public:virtual void display()const = 0;//声明为纯虚函数};class B :public A//公有派生类B定义
{
public:virtual void display()const//覆盖基类的虚函数{cout << "显示类B" << endl;}
};class C :public B//公有派生类C定义
{
public:virtual void display()const//覆盖基类的虚函数{cout << "显示类C" << endl;}
};void fun(A* p)//参数为指向基类A的对象的指针
{p->display();//"对象指针->成员名"
}int main()
{B b;//定义直接基类为A类的派生类B的对象C c;//定义直接基类为B类的派生类C的对象fun(&b);//用直接基类为A类的派生类B对象的指针调用fun函数fun(&c);//用直接基类为B类的派生类C对象的指针调用fun函数return 0;
}

运行结果:
在这里插入图片描述
分析:
程序中类A,B,C属于同一个类族,抽象类A通过纯虚函数为整个类族提供了通用的外部接口语义。通过公有派生而来的子类B,C给出了纯虚函数的具体实现,因此子类B,C是非抽象类,可以定义派生类的对象,同时根据赋值兼容规则,抽象类A的指针也可以指向任何一个派生类的对象。在fun函数中通过基类A的指针p就可以访问到p指向的派生类B,C的对象成员。这样就实现了对同一类族中的对象进行统一处理的多态。

而且,程序中派生类的虚函数可以不用virtual关键字显式说明,因为它们与基类的纯虚函数具有相同的名称、参数及返回值,由系统自动判断为虚函数。在派生类display函数原型声明中使用virtual也没有错的。

http://www.hengruixuexiao.com/news/32766.html

相关文章:

  • 数据库对于做网站的重要性徐州关键词优化排名
  • 六安网站制作人才招聘seo信息查询
  • 深圳建设网站费用明细友情链接有哪些展现形式
  • 何如做外贸网站推网优化大师免费下载安装
  • 文档怎么做网页武汉seo人才
  • 怎么做动态网站百度点击软件
  • 西安网站seo技术厂家产品推广软文200字
  • 在线做视频网站网站流量统计系统
  • web前端学习路线seo点击软件哪个好用
  • 2015百度竞价单页面网站模板源码设计百度seo排名优化公司哪家强
  • 网站中查看熊掌号怎么做的哪有免费的网站
  • 用网站开发客户发邮件网络推广是以企业产品或服务
  • wordpress模版做网站广州疫情最新新增
  • 网站的分类有哪些天津债务优化公司
  • 网站打开速度规定多长时间上海专业seo公司
  • 番禺区网站建设哪里有google永久免费的服务器
  • 腾龙时时彩做号软件官方网站找竞价托管公司
  • b2c的交易平台有哪些厦门seo推广优化
  • 昆明网站建设哪家便宜网站建设方案优化
  • 百度站长平台诊断网站优化公司哪个好
  • 赤峰网站开发公司常州seo关键词排名
  • 太原网站公司seo能干一辈子吗
  • 网站制作公司制作网站seo确定关键词
  • 建设通是正规网站吗数据分析师培训机构推荐
  • 信科网络广州建网站网站统计
  • 多元 集团 网站建设方案网络营销的内涵
  • 外贸鞋的网站建设海南网站设计
  • 重庆市建设工程质量协会网站竞价推广托管开户
  • 政府网站建设愿景百度引擎搜索
  • 做寝室介绍网站如何做推广宣传