注册 登录
编程论坛 C++教室

一道计算矩形面积的题目请问我的答案哪里有问题?

Townman 发布于 2014-10-25 01:04, 369 次点击
输入矩形的长和宽。对输入的长和宽确保都在(0,50)范围之内,否则长和宽使用默认值1。
增加Area()求矩阵面积的函数,并在函数中实现打印面积功能。其主函数如下:
int main()
{
CRectangle R;
float l,w;
cin>>l>>w;
R.Set(l,w);
cout<<R.area()<<endl;
return 0;
}
以上是题目,下面是我的答案,请大神指教,谢谢!
#include<iostream>
using namespace std;

class CRectangle
{
public:
void Set(float a,float b)
{
    int l,w;
if((a>0)&&(a<50)) l=a;
else l=1;
if((b>0)&&(b<50)) w=b;
else w=1;
}

float area()
{ int l,w;
return l*w;
}

int main()
{
CRectangle R;
float l,w;
cin>>l>>w;
R.Set(l,w);
cout<<"矩形的面积:"<<R.area()<<endl;
system("pause");
return 0;
}
3 回复
#2
stop12042014-10-25 07:46
R.Set(l,w);  //无意义
R.area()     //无意义.  返回的只是初始化时候系统给的值的乘积
system("pause"); //需要用到"cstdlib"头文件

[ 本帖最后由 stop1204 于 2014-10-25 07:50 编辑 ]
#3
stop12042014-10-25 07:55
你的类定义少了个  };
给你修改一下代码,修改处会标记  自己对比:

程序代码:
#include <iostream>
#include "cstdlib"               //system函数支持
using namespace std;

class CRectangle
{
private:                     //私有成员,可供公有成员直接调用
    float l, w;
public:                      //公有成员
    void Set(float a, float b)
    {
                            //int l,w;  此句删除,否则下列的赋值无意义.函数运行完成  l 与 w 将被释放(free memory)
        if ((a > 0) && (a < 50)) l = a;
        else l = 1;
        if ((b > 0) && (b < 50)) w = b;
        else w = 1;
    }
    float area()
    {                        //int l,w; 删除,与上面的差不多.  
        return l * w;
    }
};
int main()
{
    CRectangle R;
    float l, w;
    cin >> l >> w;
    R.Set(l, w);
    cout << "矩形的面积:" << R.area() << endl;
    system("pause");
    return 0;
}


关于 area() 与 set() 函数使用的 l w
因为 R 是 CRectangle类对象.  类对象可以直接访问所属类的公有部分,私有部分可以通过公有部分的成员去访问.
所以上面定义的 private:
    float l, w;
就起了作用


[ 本帖最后由 stop1204 于 2014-10-25 07:59 编辑 ]
#4
yangfrancis2014-10-25 22:49
Set和area两个函数各自声明了一套l和w,运行起来自然要乱算了。最好是这两个公有函数都不要声明l和w,另外在private中单独声明,Set只负责对它们赋值,area只负责对它们调用。
1