c/c++基础(十九) 友元
来源:互联网 发布:mysql数据库设置主键 编辑:程序博客网 时间:2024/06/05 02:08
概念的东西不讲了,直接上代码:
1.友元函数:
Point.类的声明与定义:
#pragma once#ifndef _POINT_H#define _POINT_Hclass Point{public:void getXY();friend double distanceXY(Point &a,Point &b);public:Point(double x,double y);~Point(void);private:double x;double y;};#endif
#include "stdafx.h"#include "Point.h"#include<cmath>#include<iostream>using namespace std;Point::Point(double x,double y){this->x=x;this->y=y;}Point::~Point(void){}void Point::getXY(){cout<<"x: "<<x<<" y: "<<y<<endl;}double distanceXY(Point &a,Point &b){double dx=a.x-b.x;double dy=a.y-b.y;return sqrt(dx*dx+dy*dy);}
测试文件TestProject.cpp:
#include "stdafx.h"#include "Point.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){Point p1(3.0,4.0),p2(5,6);p1.getXY();p2.getXY();double dis=distanceXY(p1,p2);cout<<"distance is : "<<dis<<endl;return 0;}
输出:
二,友元类:
类A的声明与定义:
#pragma onceclass A{public:void getXY();friend class B;public:A(double x,double y);~A(void);private:double x;double y;};
#include "stdafx.h"#include "A.h"#include<cmath>#include<iostream>using namespace std;A::A(double x,double y){this->x=x;this->y=y;}A::~A(void){}void A::getXY(){cout<<"A x: "<<x<<"y: "<<y<<endl;}
类B的声明与定义:
#pragma once#include "A.h"class B{public:B(void);~B(void);public:void setX(A &a);void setY(A &b);};
#include "stdafx.h"#include "B.h"B::B(void){}B::~B(void){}void B::setX(A &a){a.x=0;a.getXY();}void B::setY(A &a){a.y=0;a.getXY();}
测试类如下:
#include "stdafx.h"#include "A.h"#include "B.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){A a(5.0,5.0);B b;b.setX(a);b.setY(a);return 0;}
结果如下:
三:友元是类的成员函数
M文件声明与定义:
#pragma once#ifndef _M_H#define _M_H#include "N.h"class M{public:void getXY();friend void N::print(M& m);public:M(double x,double y);~M(void);private:double x;double y;private:void getXY2();};#endif
#include "stdafx.h"#include "M.h"#include<cmath>#include<iostream>using namespace std;M::M(double x,double y){this->x=x;this->y=y;}M::~M(void){}void M::getXY(){cout<<"M getXY x: "<<x<<"y: "<<y<<endl;}void M::getXY2(){cout<<"我是M中的私有方法"<<endl;}
N的声明与定义:
#pragma once#ifndef _N_H#define _N_Hclass M;class N{public:N(void);~N(void);public:void print(M &m);void print2(M &m);};#endif
#include "stdafx.h"#include "N.h"#include "M.h"N::N(void){}N::~N(void){}void N::print(M &m){m.getXY();m.getXY2();}void N::print2(M &m){//m.getXY();//--------这里如果打开注释会报错//m.getXY2();}
测试类:
#include "stdafx.h"#include "M.h"#include "N.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){M m(5.0,5.0);N n;n.print(m);n.print2(m);return 0;}
打印结果:
参考文章:http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/04/2535305.html
http://baike.baidu.com/view/1066547.htm?fr=aladdin
http://www.cnblogs.com/uniqueliu/archive/2011/08/02/2125590.html
0 0
- c/c++基础(十九) 友元
- C++ 友元(十九)
- C++(一)友元
- [C++]友元学习
- [c++]友元函数
- [c++] 友元详解
- 【C++】友元函数
- c++:友元函数
- C++:友元函数
- C++:友元
- C/C++ 友元
- 【C++】友元函数
- C++:友元
- C++----友元
- 【C++】C++友元
- C#_基础概念_元组
- C/C++——友元函数
- C++_友元函数
- JSONObject与JSONArray的使用
- Android JSON 解析(二) JSONReader 和 JSONWriter
- 第二天 adb命令
- 流程技术
- 加快Homebrew安装速度
- c/c++基础(十九) 友元
- 真诚的心 忽悠的本事
- ScrollView嵌套使用GridView 两个都可以滚动
- SlidingMenu(侧滑菜单)
- SSH(一)——使用Maven创建Web项目
- OpenStack 能否会成为云计算的未来?
- HashMap遍历与按key排序。
- 插入排序算法研究
- 【转载】从一个男人身上看出他的修养和抱负