c/c++基础(十九) 友元

原创 2014年11月30日 22:07:12

概念的东西不讲了,直接上代码:


1.友元函数:


Point.类的声明与定义:

#pragma once
#ifndef _POINT_H
#define _POINT_H

class 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 once
class 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_H

class 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

C++基础-友元专题

  • 2012年03月03日 18:14
  • 152KB
  • 下载

友元类(C++基础教学)

  • 2012年04月22日 13:57
  • 4.66MB
  • 下载

C/C++ 友元

友元的作用是提高了程序的运行效率,但是他破坏了类的封装性和隐蔽性。 友元可以是一个函数,被称为友元函数;也可以是一个类,被称为友元类。...

c/c++ 友元函数友元类,及const作用

友元的作用   在A里面加friend class B; 使得B类可以访问A类里面的protected和private的成员函数或成员变量 因此,可以在B里面使用a.x来访问A类...

『C/C++』友元函数和友元类

原文地址:友元函数和友元类 友元函数和友元类         采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外...

【C/C++学院】0825-类模板/final_override/类模板与普通类的派生类模板虚函数抽象模板类/类模板友元/位运算算法以及类声明/Rtti 实时类型检测/高级new创建/类以及函数包装器

类模板 类模板多个类型默认类型简单数组模板 #pragma once template //类模板可以有一个默认的值 class myArray { public: myArray(); ~m...
  • waldmer
  • waldmer
  • 2015年11月03日 12:34
  • 1772

【C/C++学院】0819-/类的成员函数与const-mutable /构造与析构/拷贝构造deletedefault以及深浅拷贝/静态成员函数成员变量类在内存的存储默认参数/友元类以及友元函数

类的成员函数与const-mutable  成员函数 Fushu.h #pragma once #include class fushu { public: int x; int y; pub...
  • waldmer
  • waldmer
  • 2015年10月23日 08:19
  • 1453

c++基础积累 友元friend的使用

通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为public(共用的),然而这做带来的问题遍是任何外部函数都可以毫无约束的访问它操作它,c++利用frien...
  • yhhwatl
  • yhhwatl
  • 2013年08月18日 10:01
  • 622

【C++基础之十】友元函数和友元类

1.概述 友元提供了一种 普通函数或者类成员函数 访问另一个类中的私有或保护成员 的机制。也就是说有两种形式的友元: (1)友元函数:普通函数对一个访问某个类中的私有或保护成员。 (2)友元类:类A中...

C++友元函数和友元类的使用基础

友元函数百度百科:       友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c/c++基础(十九) 友元
举报原因:
原因补充:

(最多只允许输入30个字)