| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3487 人关注过本帖, 1 人收藏
标题:关于类的一些问题
只看楼主 加入收藏
我不信
Rank: 2
等 级:论坛游民
威 望:1
帖 子:33
专家分:24
注 册:2016-3-3
结帖率:100%
收藏(1)
 问题点数:0 回复次数:9 
关于类的一些问题
程序代码:
#include<iostream.h>
#include<math.h>
class Point
{
private:
    int x1;
    int y1;
    int x2;
    int y2;
    float e;
public:
    float Distance(int a,int b,int c,int d);
};
float Point::Distance(int a,int b,int c,int d)
{
/*    x1=a;
    y1=b;
    x2=c;
    y2=d;*/
    e=sqrt((a-c)*(a-c)+(b-d)*(b-d));//还有一种写法是把注释号去掉,把abcd换成x1x2y1y2,一样能运行,只是私有成员的存在好像可有可无啊
    return e;
}
void main()
{
    int A1,B1,A2,B2;
    float E;
    Point P1;
    cout<<"x1=";
    cin>>A1;
    cout<<"y1=";
    cin>>B1;
    cout<<"x2=";
    cin>>A2;
    cout<<"y2=";
    cin>>B2;
    E=P1.Distance(A1,B1,A2,B2);
    cout<<"两点之间的距离为:"<<E<<endl;
}
上面的代码是能够成功运行的,但老是说类的关键的一点在于外界函数是不能够调用它的(私有)成员的,只有成员函数才可调用,但我这段程序里面好像没有用到私有成员欸,他们的存在好像毫无意义,可以改一下,改成好像必须用到私有成员吗?
搜索更多相关主题的帖子: color 
2016-03-10 16:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
设计上就是错的

授人以渔,不授人以鱼。
2016-03-10 21:22
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:0 
楼主写的是远古时候的代码嘛?
C++标准不是有一个叫“名称空间”的东东嘛?
cin和cout还有endl是怎么被编译通过的

收到的鲜花
  • 我不信2016-03-29 16:01 送鲜花  1朵   附言:我很赞同
2016-03-10 21:37
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
都把点的坐标信息当作参数传给函数了,当然没必要用到私有变量了,甚至类都不用设计。设私有变量的目的是防止用户输入不合法的参数,如输入的坐标出现在坐标系以外,或输入非数字等情况。这些权限都交到了用户手里就可能出现一些BUG
收到的鲜花
  • 我不信2016-03-29 16:02 送鲜花  1朵   附言:我很赞同
2016-03-10 21:42
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
收藏
得分:0 
程序代码:
#include<iostream.h>
#include<math.h>
class Point
{
private:
    int x1;
    int y1;
    int x2;
    int y2;
    float e;
public:
    Point();//你原代码都没构造函数实在让人大吃一惊......
    Point(int,int,int,int,int,);
    //float Distance(int a,int b,int c,int d);根本不需要传入参数,也不用这个函数吧
    float show();
};
Point::Point()
{
    //从键盘读入数据,自己写吧
}
Point::Point(int a,int b,int c,int c):x1(a),y1(b),x2(c),y2(d)
{
    e=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
float Point::show(void){return e}
//类的使用:
int main()
{
    Point pnt(0,0,2,2);
    std::cout<<pnt.show();//懒得写<<重载了,先这么着吧
    return 0;
}


[此贴子已经被作者于2016-3-11 12:02编辑过]

2016-03-11 11:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
類名是point,即那是“點”類,你設計出兩對(x,y)就已經整個偏了,能扭得順才怪。

授人以渔,不授人以鱼。
2016-03-11 21:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <iostream>

class Point
{
    friend double Distance(const Point A, const Point B);

    public:

        Point(void) : _x(0), _y(0) {};
        Point(double x, double y) : _x(x), _y(y) {};

    private:

        double _x;
        double _y;
};

double Distance(const Point A, const Point B)
{
    return sqrt(pow(A._x - B._x, 2) + pow(A._y - B._y, 2));
}

int main(void)
{
    Point A;
    Point B(1, 1);
    std::cout << Distance(A, B) << std::endl;

    getchar();
    return 0;
}


[此贴子已经被作者于2016-3-12 12:42编辑过]


授人以渔,不授人以鱼。
2016-03-12 12:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
類型必須與邏輯吻合。你設計的類型是“點”,那麽它的客觀實在概念祇能有一組坐標値,不能設計出多組。你可以設計爲“缐段”類型,那麽就可以包含兩個端點。“名實相符”,這是原則。

授人以渔,不授人以鱼。
2016-03-12 14:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
事實上,對“點”這樣的基本類型,完全不必隱藏內部變量,因爲它內部沒什麽更複雜的機制了,隱藏反而造成繁瑣。在這個例子中,爲了操作兩個點的坐標,被迫使用友元函數,這實際上與公開無異。公開點結構的坐標,通過const傳遞,就可以避免誤寫數據。

越基本的類型,越不需要隱藏。

授人以渔,不授人以鱼。
2016-03-12 14:55
壹瓣雏菊
Rank: 2
来 自:广州
等 级:论坛游民
帖 子:3
专家分:10
注 册:2016-3-15
收藏
得分:0 
好贴,受教了
2016-03-23 10:31
快速回复:关于类的一些问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029557 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved