1121派生类对象调用同名函数 ◆在派生类中可以定义和基类中同名的成员函数。 这是对基类进行改造,为派生类增加新的行为 的一种常用的方法。 ◆通过不同的派生类的对象,调用这些同名的成 员函数,实现不同的操作,也是多态性的一种 表现。 ◆在程序编译的时候,就可以确定派生类对象具 体调用哪个同名的成员函数。这是通过静态联 编实现的多态。 2021/2/24
2021/2/24 -11- 11.2.1派生类对象调用同名函数 在派生类中可以定义和基类中同名的成员函数。 这是对基类进行改造,为派生类增加新的行为 的一种常用的方法。 通过不同的派生类的对象,调用这些同名的成 员函数,实现不同的操作,也是多态性的一种 表现。 在程序编译的时候,就可以确定派生类对象具 体调用哪个同名的成员函数。这是通过静态联 编实现的多态
◆例11.1定义 Circle类和 Rectangle类为 Shape类的派生类, 通过 Circle类和 Rectangle类的对象调用同名函数 getArea0 显示对象的面积。 基类 Shape的定义 ∥例111: shape. h ifndef shape h define SHAPE class shape t public double getAreao const; void printo const ∥ Shape类定义结束 2021/2/24 12
2021/2/24 -12- 例11.1 定义Circle类和Rectangle类为Shape类的派生类, 通过Circle类和Rectangle类的对象调用同名函数getArea() 显示对象的面积。 // 例11.1: shape.h #ifndef SHAPE_H #define SHAPE_H class Shape { public: doublegetArea() const; void print() const; }; // Shape类定义结束 基类Shape的定义
class Circle: public Shaper public 派生类 Circle的定义 Circle(int=0, int=0, double=0.0); double getArea( const; ∥返回面积 void printo const; ∥输出 Circle类对象t private: int x, y 派生类 Rectangle的定义 double radius. ∥派生类 Circle定义结束 class Rectangle: public Shape I public Rectangle( int =0, int=0); ∥构造函数 double getArea0 const; ∥返回面积 void printo const ∥输出 Rectangle类 对象 private int a. b: ∥0矩形的长和宽 2021/2/24 ∥派生类 Rectangle定义结束 iendif
2021/2/24 -13- class Circle : public Shape { public: Circle( int = 0, int = 0, double = 0.0 ); doublegetArea() 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定义结束 #endif 派生类Circle的定义 派生类Rectangle的定义
包含头文件 ∥例11.1: shape.cpp include <iostream> using namespace std; 基类成员函数的定义 include"shape. h double Shape: getArea0 const cout<<"基类的 getArea函数,面积是"; return 0. 0: ∥ Shape类 getArea函数的定 义 void Shape: print( const cout<< Base class object"<<endl; ∥ Shape类 print函数定义 2021/2/24 -14
2021/2/24 -14- // 例11.1: shape.cpp #include <iostream> using namespace std; #include "shape.h" doubleShape::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 y Value, double radius Value) Circle类成员函数的定义 xe-xValue; y=value, radius= radius value ∥ Circle类构造函数 double Circle: getArea(const cout<<" Circle类的 getArea函数,面积是"; return 3. 14159* radius* radius ∥ Circle类 getAreal函数定义 void Circle: printo const cout <<center is cout<"x="≤<x≤s"y="<<y; cout < radius is"<< radius<<endl; ∥ Circle类 print函数定义 2021/2/24 -15
2021/2/24 -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类成员函数的定义