//Shape.h
#include<iostream>
using namespace std;
class Shape
{ public :
virtual void GetArea()=0;
virtual void GetPerimeter()=0;};
class Circle:public Shape
{ protected:
int m_r;
public:
Circle();
Circle(int);
virtual void GetArea();
virtual void GetPerimeter();
friend ostream &operator<<( ostream &output,
const Circle &C ) ;
Circle&operator=( Circle&);
double area,perimeter;};
class Rectangle:public Shape
{ private:
int m_w,m_h;
public:
Rectangle();
Rectangle(int,int);
virtual void GetArea();
virtual void GetPerimeter();
friend ostream &operator<<( ostream &output,
const Rectangle &R) ;
Rectangle&operator=(Rectangle&);
double area,perimeter;};
//8.2.cpp
#include "stdafx.h"
#include"Shape.h"
#include<string>
#include <iostream>
using namespace std;
int main()
{ int r=3;
int w=5,h=8;
int m_r=r;
int m_w=w;
int m_h=h;
Circle circle(r);
Rectangle rectangle(w,h);
cout<<"圆的面积为:"<<circle.area<<endl
<<"圆的周长为:"<<circle.perimeter<<endl
<<"矩形的面积为:"<<rectangle.area<<endl
<<"矩形的周长为:"<<rectangle.perimeter<<endl;
return 0;
}
//Shape.cpp
#include"stdafx.h"
#include"Shape.h"
using namespace std;
Circle::Circle( int r)
{ m_r=r;}
void Circle::GetArea()
{ int PI=3;
double area=PI*m_r*m_r;}
void Circle::GetPerimeter()
{ int PI=3;
double perimeter=2*PI*m_r;}
ostream &operator<<( ostream &output,
const Circle &C)
{
output << "面积为:" << C.area << "周长为:" << C.perimeter;
return output; }
Circle&Circle:: operator=( Circle& C)
{ int r=0;
if(&C!=this)
{ C.m_r=r; }
return *this; }
Rectangle::Rectangle(int w,int h)
{m_w=w;
m_h=h;}
void Rectangle::GetArea()
{ double area=m_w*m_h;}
void Rectangle::GetPerimeter()
{ double perimeter=2*m_w+2*m_h;}
ostream &operator<<( ostream &output,
const Rectangle&R)
{
output << "面积为:" << R.area << "周长为:" << R.perimeter;
return output; }
Rectangle&Rectangle::operator=(Rectangle &R)
{int w=0,h=0;
if(&R!=this)
{R.m_h=h;
R.m_w=w;}
return *this;}
void ShapeArea(Shape &s)
{ s.GetArea();}
void ShapePerimeter(Shape &s)
{ s.GetPerimeter();}
为什么无法获得正确的面积和周长
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- ProfSnail 2021-02-19 01:00关注
原因是,你在实现GetArea,GetPerimeter的时候,都重新在函数内新声明了一个变量double area = ...;double perimeter = ...;
你本意是修改类内public double area, perimeter的值,但是在这里因为double area = ...;,将计算的所得值赋给了一个函数内的局部变量,所以算半天还是初始值。
另外,记得在main()函数里面调用
Circle circle = Circle(r);
circle.GetArea();
circle.GetPerimeter();
Rectangle rectangle = Rectangle(w, h);
rectangle.GetArea();
rectangle.GetPerimeter();
以计算需要的数值。我将你的代码进行了修改,在我本机上运行是没问题的。
代码我贴到这里了:
main文件:https://paste.ubuntu.com/p/T2T9QBS7P9/
.h头文件:https://paste.ubuntu.com/p/sQNJFR538H/
shape.cpp文件:https://paste.ubuntu.com/p/9z74jvxdXh/
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥50 用AT89C52单片机设计一个温度测量与控制电路
- ¥15 无法import pycausal
- ¥15 VS2022创建MVC framework提示:预安装的程序包具有对缺少的注册表值的引用
- ¥15 weditor无法连接模拟器Local server not started, start with?
- ¥20 6-3 String类定义
- ¥15 嵌入式--定时器使用
- ¥20 51单片机学习中的问题
- ¥30 Windows Server 2016利用兩張網卡處理兩個不同網絡
- ¥15 Python中knn问题
- ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库