friend之友元函数和友元类

来源:互联网 发布:天刀数据加载失败 编辑:程序博客网 时间:2024/05/21 14:54
// friend_func.cpp : Defines the entry point for the console application.////写一个函数求两个点的中点//友元函数可以访问类的私有成员,但友元函数不是类的成员函数/*#include "stdafx.h"#include <iostream>#include<stdlib.h>using namespace std;class Point{friend Point middle(const Point& p1, const Point &p2);public:Point(float a,float b);~Point();void print(){cout << "x=  " << x << ", y= " << y << endl;}float get_X(){return x;}float get_Y(){return y;}private:float x, y;};Point::Point(float a, float b):x(a),y(b){}Point::~Point(){}Point middle(const Point& p1, const Point &p2){Point mid_point((p1.x + p2.x) / 2, (p1.y+ p2.y) / 2);//访问私有成员,不被允许return mid_point;}int main(){Point p(1, 3);Point q(1, 5);middle(p, q).print();system("pause");    return 0;}*///友元类#include "stdafx.h"#include <iostream>#include<stdlib.h>using namespace std;class Circle;//前向声明,表示有一个类为Circle,但此时编译器并不知道该类的具体声明和实现class Point{public:Point();Point(float a, float b);~Point();    void print()const;friend class Circle;//声明友元类,Circle类中的所有函数均可以访问私有变量x,y//友元函数不受访问属性限制,因此无论放在public和private中均可以friend const Point middle(const Point& u, const Point& v);//声明友元函数private:float x, y;};Point::Point() :x(0), y(0){cout << "Default Constructor   is called!";}Point::Point(float a, float b) :x(a), y(b){}Point::~Point(){}//middle是友元函数,不是成员函数const Point  middle(const Point& u, const Point& v){Point mid_point((u.x+v.x)/2.0,(u.y+v.y)/2.0);return mid_point;}void Point::print()const{cout << "(" << x << " , " << y <<")"<< endl;}//###############################################################class Circle{public:Circle();~Circle();Circle& move(float a, float b);void print() const ;private:float radius;Point center;};Circle::Circle():radius(0.0f){center.x = 0.0f;center.y = 0.0f;}Circle::~Circle(){}Circle& Circle::move(float a, float b){center.x += a;center.y += b;return *this;}void Circle::print()const{center.print();//打印圆心,Center是point类cout << "radius = " << radius << endl;}int main(){Point p1(1.0, 2.0);Point p2(3.0, 4.0);cout << "第一个点:";p1.print();cout << "第二个点:";p2.print();cout << "两个点的中点是:";middle(p1, p2).print();Circle c;c.print();cout << "移动圆心: ";c.move(10.0, 10.0);c.print();system("pause");return 0;}

0 0
原创粉丝点击