- 1、本文档共123页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++扩展知识【荐】.ppt
* 3.3 虚析构函数 将例5程序中的?Shape析构函数作以上修改后,运行的结果将是: Shape类构造函数被调用 Circle类构造函数被调用 Circle类析构函数被调用 Shape类析构函数被调用 * 4 纯虚函数和抽象类 前例,基类Shape并不是一个具体的“形状”的抽象,而是各种实际的“形状”的抽象。 在C++中,对于那些在基类中不需要定义具体的行为的函数,可以定义为纯虚函数。 对于那些只是反映一类事物公共特性的类,在C++中可以定义为“抽象类”。 * 4 纯虚函数和抽象类 纯虚函数格式: virtual 返回值类型 函数名(参数表) = 0; * 4 纯虚函数和抽象类 纯虚函数的声明和使用有以下的特点: 纯虚函数一定是在基类中声明的。 在多级继承的情况下,纯虚函数除了在最高层基类中声明外,也可以在较低层的基类中声明。 纯虚函数是没有函数体的。函数体是用“= 0”来代替了。 纯虚函数是不可以被调用的。凡是需要被调用的函数都不可以声明为纯虚函数。 * 4 纯虚函数和抽象类 包含纯虚函数的类为抽象类。 抽象类定义的一般形式是: class 类名{ public: virtual 返回值类型 函数名(参数表) = 0; //其他函数的声明; }; * 4 纯虚函数和抽象类 抽象类的定义和使用具有以下的特点: 不可以定义抽象类的对象。 可以定义抽象类的指针和抽象类的引用。目的是通过这些指针或引用访问派生类的虚函数,实现运行时的多态。 如果抽象类的派生类中没有具体实现纯虚函数的功能,这样的派生类仍然是抽象类。 抽象类中除了纯虚函数外,还可以定义其他的非纯虚函数。 小结 多态性是面向对象程序设计最重要的特点之一。本章介绍了多态性中最重要的两个表现:运行多态和参数多态。参数多态就是模板的使用。 运行多态的表现就是: 一种形态的语句:通过基类指针访问基类和派生类的同名函数; 多种条件的执行:用不同派生类对象的地址初始化这个基类指针; * -*- 一.通过派生类对象调用同名成员函数 在派生类中可以定义和基类的成员函数同名的成员函数。这是对基类进行改造,是派生类增加新的行为的一种常用的方法。 在程序编译的时候,就可以确定派生类对象具体调用哪个同名的成员函数。这是通过静态联编实现的多态。 * -*- 例1:定义Circle类和Rectangle类为Shape类的派生类,通过Circle类和Rectangle类的对象调用重载函数getArea()显示对象的面积。 class Shape { public: double getArea() const; void print() const; }; * -*- class Circle : public Shape { public: Circle( int = 0, int = 0, double = 0.0 ); double getArea() const; // 返回面积 void print() const; private: int x,y; // 圆心 double radius; // 半径 }; * -*- class Rectangle : public Shape { public: Rectangle( int = 0, int = 0); double getArea() const; // 面积 void print() const; private: int a,b; // 长和宽 }; * -*- // 例1: shape.cpp #include iostream using namespace std; #include shape.h double Shape::getArea() const { cout基类的getArea函数,面积是 ; return 0.0; } void Shape::print() const { coutBase class Objectendl; } * Circle::Circle( int xValue, int yValue, double radiusValue ) { x=xValue; y=yValue; radius= radiusValue ; } double Circle::getArea() const{ coutCircle类的getArea函数,面积是 ; return 3.14159 * radius *
文档评论(0)