- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
上午11时54分27秒 上午11时52分52秒 上午11时54分35秒 上午11时54分51秒 上午11时55分2秒 上午11时55分10秒 上午11时55分14秒 上午11时55分21秒 上午11时55分26秒 上午11时55分33秒 上午11时55分39秒 上午11时55分43秒 9.3 虚函数 虚函数是动态联编的基础。 虚函数是成员函数,其声明方式如下: Virtual 函数类型函数名(参数表) 如果某类中的一个成员函数被说明为虚函数,这就意味着该函数可能在派生来中有不同的实现。 当时用这个成员函数的指针或引用所标识的对象时,采用动态联编方式。 有时,在基类中将某一成员函数定义为虚函数,并不是基类本身的需要,而是考虑到派生类的需要,在基类中预留了一个函数名,具体功能留给派生类根据需要去定义。 纯虚函数是在声明虚函数的时候被初始化为0的函数。 纯虚函数与抽象类 纯虚函数是一种特殊的虚函数,它的一般格式如下:class 类名{??? virtual 类型函数名(参数表)=0;??? …};??? 在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。 #include iostream.h class point {public: point(int i=0, int j=0) { x0=i; y0=j; } virtual void set() = 0; virtual void draw() = 0; protected: int x0, y0; }; class line : public point {public: line(int i=0, int j=0, int m=0, int n=0):point(i, j) { x1=m; y1=n; } void set() { coutline::set() called.\n; } void draw() { coutline::draw() called.\n; } protected: int x1, y1; }; class ellipse : public point {public: ellipse(int i=0, int j=0, int p=0, int q=0):point(i, j) { x2=p; y2=q; } void set() { coutellipse::set() called.\n; } void draw() { coutellipse::draw() called.\n; } protected: int x2, y2; }; void drawobj(point *p) { p-draw();} void setobj(point *p) { p-set();} void main() { line *lineobj = new line; ellipse *elliobj = new ellipse; drawobj(lineobj); drawobj(elliobj); coutendl; setobj(lineobj); setobj(elliobj); cout\nRedraw the object...\n; drawobj(lineobj); drawobj(elliobj); } 使用注意: 1)纯虚函数没有函数体; 2)最后面的“=0”并不表示函数返回值为0,只是起形式上的作用; 3)这是一个声明语句,最后应有分号。 纯虚函数的作用是在基类中为其派生类保留一个函数名,以便派生类根据需要对其进行定义。如果在基类中没有保留函数名,则无法实现多态性。 抽象类 带有纯虚函数的类称为抽象类。抽象类是一种特殊的类,它是为了抽象和设计的目的而建立的,它处于继承层次结构的较上层。抽象类是不能定义对象的,在实际中为了强调一个类是抽象类,可将该类的构造函数说明为保护的访问控制权限。???抽象类的主要作用是将有关的组织在一个继承层次结构中,由它来为它们提供一个公共的根,相关的子类是从这个根派生出来的。???抽象类刻画了一组子类的操作接口的通用语义,这些语义也传给子类。一般而言,抽象类只描述这组子类共同的操作接口,而完整的实现留给子类。??? 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。如果派生类没有重新定义纯虚函数,而派生类只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类
原创力文档


文档评论(0)