鱼C论坛

 找回密码
 立即注册
查看: 390|回复: 2

[已解决]卑微求助,简单程序改错。

[复制链接]
发表于 2020-4-28 17:15:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
定义抽象类Geometry,含有计算几何图形周长的纯虚函数double Circumfer();含有计算面积的纯虚函数double Area();在此基础上公有的派生出矩形类Rectangle,和圆类Circle,并且分别给出计算周长函数Circumf()和计算面积函数Area()的定义。最后通过函数fun()分别输出面积和周长。

  1. #include<iostream>
  2. using namespace std;
  3. const double pi = 3.14;

  4. class Geometry{
  5. public:
  6.         Geometry();
  7.         virtual double Circumfer() const=0;                //纯虚函数
  8.         virtual double Area() const=0;
  9. };

  10. class Rectangle:public Geometry{
  11. public:
  12.         Rectangle(double A, double B) {
  13.                 a = A;
  14.                 b = B;
  15.         }
  16.         double Circumf() const;
  17.         double Area() const;
  18.         void fun();
  19. private:
  20.         double a, b;
  21. };


  22. double Rectangle::Circumf() const {
  23.         double l,a,b;
  24.         l = 2*a+2*b;
  25. }

  26. double Rectangle::Area() const {
  27.         double s,a,b;
  28.         s = a * b;

  29. }


  30. class Circle:public Geometry {
  31. public:
  32.         Circle(int R) {
  33.                 r = R;
  34.         }
  35.         double Circumf() const;
  36.         double Area() const;
  37.         void fun();
  38. private:
  39.         int r;
  40. };

  41. double Circle::Circumf() const {
  42.         double l,r;
  43.         l = 2 *pi*r;
  44. }

  45. double Circle::Area() const {
  46.         double s,r;
  47.         s = pi*r*r;

  48. }

  49. void fun(const Geometry * ptr)
  50. {
  51.         ptr->Circumfer();
  52.         ptr->Area();       
  53. }

  54. int main()
  55. {
  56.         Rectangle x1(2, 3);
  57.         Rectangle* p1;
  58.                                              
  59.                 cout << "Rectangle:" << endl;
  60.         fun(p1);


  61.         Circle y1(5);
  62.         Circle* p2;

  63.                 cout << "Circle:" << endl;
  64.         fun(p2);

  65.         return 0;
  66. }
复制代码




错误如下:由于知识有限,不太会改。。。
错误(活动)        E0322        不允许使用抽象类类型 "Rectangle" 的对象:       
错误(活动)        E0322        不允许使用抽象类类型 "Circle" 的对象:               
错误        C2259        “Rectangle”: 无法实例化抽象类               
错误        C2259        “Rectangle”: 无法实例化抽象类               
错误        C2259        “Circle”: 无法实例化抽象类       
错误        C2259        “Circle”: 无法实例化抽象类               




最佳答案
2020-4-28 17:36:19
  1. #include <iostream>

  2. using namespace std;
  3. const double pi = 3.14;

  4. class Geometry {
  5. public:
  6.     Geometry() {}
  7.     virtual double Circumfer() const = 0;
  8.     virtual double Area() const = 0;
  9. };

  10. class Rectangle: public Geometry {
  11. public:
  12.     Rectangle(double A, double B) {
  13.         a = A;
  14.         b = B;
  15.     }
  16.     double Circumfer() const;
  17.     double Area() const;
  18. private:
  19.     double a, b;
  20. };

  21. double Rectangle::Circumfer() const {
  22.     return 2 * a + 2 * b;
  23. }

  24. double Rectangle::Area() const {
  25.     return a * b;
  26. }

  27. class Circle: public Geometry {
  28. public:
  29.     Circle(int R) {
  30.         r = R;
  31.     }
  32.     double Circumfer() const;
  33.     double Area() const;
  34. private:
  35.     int r;
  36. };

  37. double Circle::Circumfer() const {
  38.     return 2 * pi * r;
  39. }

  40. double Circle::Area() const {
  41.     return pi * r * r;
  42. }

  43. void fun(const Geometry *ptr) {
  44.     std::cout << ptr->Circumfer() << " " << ptr->Area() << std::endl;
  45. }

  46. int main() {
  47.     Rectangle x1(2, 3);
  48.     cout << "Rectangle:" << endl;
  49.     fun(&x1);

  50.     Circle y1(5);
  51.     cout << "Circle:" << endl;
  52.     fun(&y1);
  53.     return 0;
  54. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 17:33:51 | 显示全部楼层
  1. #include <iostream>

  2. using namespace std;
  3. const double pi = 3.14;

  4. class Geometry {
  5. public:
  6.     Geometry() {}
  7.     virtual double Circumfer() const = 0;
  8.     virtual double Area() const = 0;
  9. };

  10. class Rectangle: public Geometry {
  11. public:
  12.     Rectangle(double A, double B) {
  13.         a = A;
  14.         b = B;
  15.     }
  16.     double Circumfer() const;
  17.     double Area() const;
  18. private:
  19.     double a, b;
  20. };

  21. double Rectangle::Circumfer() const {
  22.     return 2 * a + 2 * b;
  23. }

  24. double Rectangle::Area() const {
  25.     return a * b;
  26. }

  27. class Circle: public Geometry {
  28. public:
  29.     Circle(int R) {
  30.         r = R;
  31.     }
  32.     double Circumfer() const;
  33.     double Area() const;
  34. private:
  35.     int r;
  36. };

  37. double Circle::Circumfer() const {
  38.     return 2 * pi * r;
  39. }

  40. double Circle::Area() const {
  41.     return pi * r * r;
  42. }

  43. void fun(const Geometry *ptr) {
  44.     std::cout << ptr->Circumfer() << " " << ptr->Area();
  45. }

  46. int main() {
  47.     Rectangle x1(2, 3);
  48.     cout << "Rectangle:" << endl;
  49.     fun(&x1);
  50.     std::cout << std::endl;

  51.     Circle y1(5);
  52.     cout << "Circle:" << endl;
  53.     fun(&y1);
  54.     std::cout << std::endl;
  55.     return 0;
  56. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-28 17:36:19 | 显示全部楼层    本楼为最佳答案   
  1. #include <iostream>

  2. using namespace std;
  3. const double pi = 3.14;

  4. class Geometry {
  5. public:
  6.     Geometry() {}
  7.     virtual double Circumfer() const = 0;
  8.     virtual double Area() const = 0;
  9. };

  10. class Rectangle: public Geometry {
  11. public:
  12.     Rectangle(double A, double B) {
  13.         a = A;
  14.         b = B;
  15.     }
  16.     double Circumfer() const;
  17.     double Area() const;
  18. private:
  19.     double a, b;
  20. };

  21. double Rectangle::Circumfer() const {
  22.     return 2 * a + 2 * b;
  23. }

  24. double Rectangle::Area() const {
  25.     return a * b;
  26. }

  27. class Circle: public Geometry {
  28. public:
  29.     Circle(int R) {
  30.         r = R;
  31.     }
  32.     double Circumfer() const;
  33.     double Area() const;
  34. private:
  35.     int r;
  36. };

  37. double Circle::Circumfer() const {
  38.     return 2 * pi * r;
  39. }

  40. double Circle::Area() const {
  41.     return pi * r * r;
  42. }

  43. void fun(const Geometry *ptr) {
  44.     std::cout << ptr->Circumfer() << " " << ptr->Area() << std::endl;
  45. }

  46. int main() {
  47.     Rectangle x1(2, 3);
  48.     cout << "Rectangle:" << endl;
  49.     fun(&x1);

  50.     Circle y1(5);
  51.     cout << "Circle:" << endl;
  52.     fun(&y1);
  53.     return 0;
  54. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 08:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表