1. 上机分析下面程序,掌握抽象类、纯虚函数以及动态绑定。 // shape.h 文件 定义抽象基类Shape #ifndef SHAPE_H #define SHAPE_H #include public: virtual double Area() const { return 0.0; } // 纯虚函数,在派生类中重载 virtual void PrintShapeName() const = 0; virtual void Print() const = 0; }; #endif // point.h 文件 定义类Point #ifndef POINT_H #define POINT_H #include \"shape.h\" class Point : public Shape { int x, y; //点的x 和y 坐标 public: Point( int = 0, int = 0 ); // 构造函数 void SetPoint( int a, int b ); // 设置坐标 int GetX() const // 取x 坐标 { return x; } int GetY() const // 取y 坐标 { return y; } virtual void PrintShapeName() const { cout << \"Point: \"; } virtual void Print() const; //输出点的坐标 }; #endif // Point.cpp 文件 Point 类的成员函数定义 #include Point::Point( int a, int b ) : x( a ), y( b ) {} void Point::SetPoint( int a, int b ) { x = a; y = b; } void Point::Print() const { cout << '[' << x << \ } // circle.h 定义类Circle #ifndef CIRCLE_H #define CIRCLE_H #include class Circle : public Point { double radius; public: Circle(int x = 0, int y = 0, double r = 0.0); void SetRadius( double r ); //设置半径 double GetRadius() const; //取半径 virtual double Area() const; //计算面积a virtual void Print() const; //输出圆心坐标和半径 virtual void PrintShapeName() const { cout << \"Circle: \"; } }; #endif // circle.cpp 文件 circle 类的成员函数定义 #include \"circle.h\" Circle::Circle(int a,int b,double r): Point(a,b), radius( r ) { } void Circle::SetRadius( double r ) { radius = ( r >= 0 ? r : 0 ); } double Circle::GetRadius() const { return radius; } double Circle::Area() const { return 3.14159 * radius * radius; } void Circle::Print() const { cout << \"Center = \"; Point::Print(); cout << \"; Radius = \" << radius << endl; } //main.cpp 文件演示图形类 #include void virtualViaPointer( const Shape * ); void virtualViaReference( const Shape & ); int main() { //创建point、circle 对象 Point point(30,50); Circle circle(120,80,10.0); //输出point、circle、rectangle 对象信息 point.PrintShapeName(); point.Print(); cout << endl; circle.PrintShapeName(); circle.Print(); //定义基类对象指针 Shape *arrayOfShapes[2]; arrayOfShapes[ 0 ] = &point; arrayOfShapes[ 1 ] = &circle; //通过基类对象指针访问派生类对象 cout << \"Virtual function calls made off \" << \"base-class pointers\\n\"; for ( int i = 0; i < 2; i++ ) virtualViaPointer( arrayOfShapes[ i ] ); cout << \"Virtual function calls made off \" << \"base-class references\\n\"; for ( int j = 0; j < 2; j++ ) virtualViaReference( *arrayOfShapes[ j ] ); return 0; } //通过基类对象指针访问虚函数实现动态绑定 void virtualViaPointer( const Shape *baseClassPtr ) { baseClassPtr->PrintShapeName(); baseClassPtr->Print(); cout << \"Area = \" << baseClassPtr->Area() << endl; } //通过基类对象引用访问虚函数实现动态绑定 void virtualViaReference( const Shape &baseClassRef ) { baseClassRef.PrintShapeName(); baseClassRef.Print(); cout << \"Area = \" << baseClassRef.Area() << endl; } 实验练习题 1.设计一个抽象类及其子类,可以计算2种以上图形的面积(例如圆形和多边形,可百度海式). 2. 假设有三个类型数组(各含10个数据)需要进行排序:int,double和string. 请利用函数模板编程实现.其中包括数据成员T b[n]以及对其进行排序的成员函数 sort( ),模板参数T可实例化成字符串。 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuoyibo.net 版权所有 湘ICP备2023021910号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务