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

关于类的一些问题

我不信 发布于 2016-03-10 16:19, 3691 次点击
程序代码:
#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;
}
上面的代码是能够成功运行的,但老是说类的关键的一点在于外界函数是不能够调用它的(私有)成员的,只有成员函数才可调用,但我这段程序里面好像没有用到私有成员欸,他们的存在好像毫无意义,可以改一下,改成好像必须用到私有成员吗?
9 回复
#2
TonyDeng2016-03-10 21:22
设计上就是错的
#3
hjx11202016-03-10 21:37
楼主写的是远古时候的代码嘛?
C++标准不是有一个叫“名称空间”的东东嘛?
cin和cout还有endl是怎么被编译通过的

#4
yangfrancis2016-03-10 21:42
都把点的坐标信息当作参数传给函数了,当然没必要用到私有变量了,甚至类都不用设计。设私有变量的目的是防止用户输入不合法的参数,如输入的坐标出现在坐标系以外,或输入非数字等情况。这些权限都交到了用户手里就可能出现一些BUG
#5
wengbin2016-03-11 11:57
程序代码:

#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编辑过]

#6
TonyDeng2016-03-11 21:47
類名是point,即那是“點”類,你設計出兩對(x,y)就已經整個偏了,能扭得順才怪。
#7
TonyDeng2016-03-12 12:40
程序代码:

#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编辑过]

#8
TonyDeng2016-03-12 14:48
類型必須與邏輯吻合。你設計的類型是“點”,那麽它的客觀實在概念祇能有一組坐標値,不能設計出多組。你可以設計爲“缐段”類型,那麽就可以包含兩個端點。“名實相符”,這是原則。
#9
TonyDeng2016-03-12 14:55
事實上,對“點”這樣的基本類型,完全不必隱藏內部變量,因爲它內部沒什麽更複雜的機制了,隱藏反而造成繁瑣。在這個例子中,爲了操作兩個點的坐標,被迫使用友元函數,這實際上與公開無異。公開點結構的坐標,通過const傳遞,就可以避免誤寫數據。

越基本的類型,越不需要隱藏。
#10
壹瓣雏菊2016-03-23 10:31
好贴,受教了
1