1121派生类对象调用同名函数 ◆在派生类中可以定义和基类中同名的成员函 数。这是对基类进行改造,为派生类增加新的 行为的一种常用的方法 ◆通过不同的派生类的对象,调用这些同名的成 员函数,实现不同的操作,也是多态性的一种 表现。 ◆在程序编译的时候,就可以确定派生类对象具 体调用哪个同名的成员函数。这是通过静态联 编实现的多态 2005-4-28 北京邮电大学电信工程学院计算机技术中心
2005-4-28 北京邮电大学电信工程学院计算机技术中心 -11- 11.2.1派生类对象调用同名函数 在派生类中可以定义和基类中同名的成员函 数。这是对基类进行改造,为派生类增加新的 行为的一种常用的方法。 通过不同的派生类的对象,调用这些同名的成 员函数,实现不同的操作,也是多态性的一种 表现。 在程序编译的时候,就可以确定派生类对象具 体调用哪个同名的成员函数。这是通过静态联 编实现的多态
◆例11.1定义 Circle类和 Rectangle类为 Shape类的派生类,通 过 Circle类和 Rectangle类的对象调用重载函数 getArea0显示 对象的面积。 基类 Shape的定义 //例11.1: shape.h #ifndef SHAPE H #define SHAPE H class Shape public double getAreaoconst void printo const // Shape类定义结束 2005-4-28 北京邮电大学电信工程学院计算机技术中心
2005-4-28 北京邮电大学电信工程学院计算机技术中心 -12- 例11.1 定义Circle类和Rectangle类为Shape类的派生类,通 过Circle类和Rectangle类的对象调用重载函数getArea()显示 对象的面积。 // 例11.1: shape.h #ifndef SHAPE_H #define SHAPE_H class Shape { public: double getArea() const; void print() const; }; // Shape类定义结束 基类Shape的定义
class Circle: public Sh public 派生类 Circle的定义 Circle( int =0, int =0, double=0.0) double getareao const /返回面积 void print const /输出 Circle类对象t private int x, y; 派生类 Rectangle的定义 double radius //派生类 Circle定义 结束 class Rectangle public Shape publIC: Rectangle( int=0, int =0) /构造函数 double getArea(const /返回面积 void printo const //输出 Rectangle 类对象 private 2,b; 北京邮电大学电信工程学院计算机技术 矩形的长和宽 /派生类 Rectangle定义结束
2005-4-28 北京邮电大学电信工程学院计算机技术中心 -13- class Circle : public Shape { public: Circle( int = 0, int = 0, double = 0.0 ); double getArea() const; // 返回面积 void print() const; // 输出Circle 类对象t private: int x,y; // 圆心座标 double radius; // 圆半径 }; // 派生类Circle定义 结束 class Rectangle : public Shape { public: Rectangle( int = 0, int = 0); // 构造函数 double getArea() const; // 返回面积 void print() const; // 输 出 Rectangle 类对象 private: int a,b; // 矩形的长和宽 }; // 派生类Rectangle定义结束 派生类Circle的定义 派生类Rectangle的定义
包含头文件 //例11.1: shape.cpp include < iostream> using namespace std 基类成员函数的定义 #include shape. h double shape: getAreao const cout<基类的 getAreal函数,面积是 return 0. 0 // Shape类 getArea函 数的定义 void Shape: printo const cout<< Base class Object"<endl // Shape类 print函数定义 2005-4-28 北京邮电大学电信工程学院计算机技术中心 14
2005-4-28 北京邮电大学电信工程学院计算机技术中心 -14- // 例11.1: shape.cpp #include <iostream> using namespace std; #include "shape.h" double Shape::getArea() const { cout<<"基类的getArea函数,面积是 "; return 0.0; } // Shape类getArea函 数的定义 void Shape::print() const { cout<<"Base class Object"<<endl; } //Shape类print函数定义 包含头文件 基类成员函数的定义
Circle:: Circle( int xValue, int yValue, double radiusValue ircle类成员函数的定义 x=xValue: y=value: radius= radiusvalue // Circle类构造函数 double Circle: getAreao const cout<" Circle类的 getArea函数,面积是 return 3. 14159 *k radius radius // Circle类 getArea函数定义 void Circle: printoconst cout << center is cout("x="<x<"y="<<y; cout < radius is<< radius<<endl // Circle类prin函数定义 2005-4-28 北京邮电大学电信工程学院计算机技术中心 15-
2005-4-28 北京邮电大学电信工程学院计算机技术中心 -15- Circle::Circle( int xValue, int yValue, double radiusValue ) { x=xValue; y=yValue; radius= radiusValue ; } // Circle类构造函数 double Circle::getArea() const { cout<<"Circle类的getArea函数,面积是 "; return 3.14159 * radius * radius; } // Circle类getArea函数定义 void Circle::print() const { cout << "center is "; cout<<"x="<<x<<" y="<<y; cout << "; radius is " << radius<<endl; } // Circle类print函数定义 Circle类成员函数的定义