Shapeh#pragma once定义一个抽象图形类Shape定义纯虚函数area和perim用以计算面积和周长。从Shape派生出矩形Rectangle、圆形Circle具体派生类。程序中通过基类指针纯虚析构来调用派生类对象中的重写的纯虚函数计算不同形状对象的面积和周长。 抽象图形类class Shapepublic virtual double areavoid = 0; virtual d
代码中存在几个问题:
- 在创建Rectangle对象时,应该使用new关键字,而不是直接调用构造函数。应该改为:
Shape* ob = new Rectangle(length, wide);
- Rectangle类的构造函数应该是public,而不是private。应该改为:
public: Rectangle(double length, double width){ this->length = length; this->width = width; }
- 在输出矩形面积时,应该使用ob指针调用area()函数,而不是直接输出。应该改为:
cout << ob->area();
修改后的完整代码如下:
//Shape.h #pragma once
/定义一个抽象图形类Shape,定义纯虚函数area()和perim()用以计算面积和周长。 从Shape派生出矩形(Rectangle)、圆形(Circle)具体派生类。 程序中通过基类指针(//纯虚析构)来调用派生类对象中的重写的纯虚函数 计算不同形状对象的面积和周长。/
//抽象图形类 class Shape { public: virtual double area(void) = 0; virtual double perim(void) = 0;
};
// Rectangle.h #pragma once #include "Shape.h"
/定义一个抽象图形类Shape,定义纯虚函数area()和perim()用以计算面积和周长。 从Shape派生出矩形(Rectangle)、圆形(Circle)具体派生类。 程序中通过基类指针(//纯虚析构)来调用派生类对象中的重写的纯虚函数 计算不同形状对象的面积和周长。/
class Rectangle :public Shape { private: double length; //矩形的长 double width; //矩形的宽 public: Rectangle(double length, double width){ this->length = length; this->width = width; } virtual double area(void) { return length * width; } virtual double perim(void) { return 2 * (length + width); } };
//Main.cpp
#include
int main() { int length = 2, wide = 5; Shape* ob = new Rectangle(length, wide); cout << ob->area(); delete ob; return 0; }
原文地址: https://www.cveoy.top/t/topic/b7ia 著作权归作者所有。请勿转载和采集!