您好,欢迎来到图艺博知识网。
搜索
您的当前位置:首页第十二周实验

第十二周实验

来源:图艺博知识网
第十二周实验

1. 上机分析下面程序,掌握抽象类、纯虚函数以及动态绑定。 // shape.h 文件 定义抽象基类Shape #ifndef SHAPE_H #define SHAPE_H #include class Shape {

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 #include \"point.h\"

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 #include \"point.h\"

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 #include \"shape.h\" #include \"point.h\" #include \"circle.h\"

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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务