C++友元

View Code
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;

#define P(x) (x)*(x)

class Point {
    friend class B;
public:
    Point(double x=0,double y=0) {
        X = x;
        Y = y;
    }
    Point(Point &a);
    double get_x();
    double get_y();
    friend double dis(Point &a,Point &b);
private:
    double X,Y;
};

Point::Point(Point &a) {
    X = a.X;
    Y = a.Y;
}

class B {
public:
    void reset(int,int);
    B(Point &a);
    void showset();
private:
    Point val;
};

B::B(Point &a) {//B是Point的友元所以可以用Point的内容,以下同理
    val.X = a.X;
    val.Y = a.Y;
}

void B::reset(int x=0,int y=0) {
    val.X = x;
    val.Y = y;
}

void B::showset() {
    cout << val.get_x() << " " << val.get_y() << endl;
}

double dis(Point &a,Point &b){
    return sqrt(P(a.X - b.X) + P(a.Y - b.Y));
}

//double mydis(Point &a,Point &b){//不是友元则不能访问类的私有成员
//    return sqrt(P(a.X - b.X) + P(a.Y - b.Y));
//}

double Point::get_x() {
    return X;
}

double Point::get_y() {
    return Y;
}

int main() {
    Point s,t(3,4);
    B ans(t);
    cout << s.get_x() << " " << s.get_y() << endl;
    cout << t.get_x() << " " << t.get_y() << endl;
    cout << "dis:" << dis(s,t) << endl;
    ans.showset();
    ans.reset(100,200);
    ans.showset();
    return 0;
}

 

posted @ 2013-04-01 13:11  gray035  阅读(123)  评论(0编辑  收藏  举报