您的位置:首页 > 其它

文章标题

2016-06-23 17:41 169 查看
友元函数

2016.6.20

友元:1.友元函数2.友元类

友元;可以直接访问私有成员(破坏了数据安全)

友元函数:friend /友元函数不是成员函数¥¥

成员函数调用:对象。类名

普通函数调用:函数名

友元类:friend

如果是类A是类B的一个友元函数,那么类A中放入所有成员函数都是类B的友元函数

#include "point.hpp”                                           //main函数(测试)
#include <iostream>
using namespace std;
#include<math.h>
float distance(const Mypoint &p1,const Mypoint &p2){
float a=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
return a;

}
Mypoint middlepoint(const Mypoint &p1,const Mypoint &p2){
return Mypoint((p1.x+p2.x)/2,(p1.y+p2.y)/2);
}

int main(int argc, const char * argv[]) {
Mypoint p1(3,4);
Mypoint p2(0,0);
p1.print();
p2.print();
float a=distance(p1,p2);
cout<<"diatance:"<<a<<endl;
return 0;
}

#include "point.hpp”


//实现
#include <iostream>
using namespace std;
#include<math.h>
Mypoint::Mypoint(int x,int y){
this->x=x;
this->y=y;
}
void  Mypoint:: print(){
cout<<"("<<x<<","<<y<<")"<<endl;
}

#ifndef point_hpp


//头文件
#define point_hpp

#include <stdio.h>
class Mypoint{
friend   float distance(const Mypoint &p1,const Mypoint &p2);
friend   Mypoint middlepoint(const Mypoint &p1,const Mypoint &p2);
public:
Mypoint(int x,int y);
void print();
private:
int x;
int y;
};
#endif /* point_hpp */


程序结果:

(3,4)
(0,0)
diatance:5
Program ended with exit code: 0


友元类:friend

如果是类A是类B的一个友元函数,那么类A中放入所有成员函数都是类B的友元函数

#ifndef Rectangle_hpp                                               **//rectangle的声明**
#define Rectangle_hpp
#include <stdio.h>
class Rectanle{
friend class Cube;
public:
Rectanle(int l,int w);
int Area()const;
void print();
private:
int longth;
int width;
};
#endif /* Rectangle_hpp */


#include <iostream>                                                  **//rectangle的实现     rectangle.cpp**
using namespace std;
#include "Rectangle.hpp"
Rectanle::Rectanle(int l,int w){
longth=l;
width=w;
}
int  Rectanle:: Area()const{
return longth*width;
}
void  Rectanle::  print(){
cout<<"longth:"<<longth<<"width"<<width<<endl;
}


#include "Rectangle.hpp”                                            **//cube头文件(的声明) cube.cpp**
#ifndef Cube_hpp
#define Cube_hpp
#include <stdio.h>
class Cube{
friend  Cube mVolume( Cube & c1, Cube& c2);
friend const int SumCube(const Cube & c1,const Cube c2);
public:
Cube(int l,int w,int h);
int volume()const;
int pare();
void set(int l,int w,int h);
void print();
private:
Rectanle r;
int heigth;
};
#endif /* Cube_hpp */


#include "Rectangle.hpp”                                           **//cube.cpp**
#include "Cube.hpp"
#include <iostream>
using namespace std;
Cube::Cube(int l,int w,int h):r(l,w){
heigth=h;
}
int  Cube::volume()const{
return r.Area()* heigth;
}int Cube::pare(){
return ( (r.width*r.longth)+(r.width*heigth)+(r.longth*heigth))*2;
}
void Cube::set(int l,int w,int h){
r.longth=l;
r.width=w;
heigth=h;
}
void Cube::print(){
cout<<"longth:"<<r.longth<<"wigth:"<<r.width<<"heigth"<<heigth<<endl;
}

Cube mVolume( Cube & c1, Cube& c2){                          //main.cpp
if(c1.volume()>c2.volume())
return c1;
else
return c2;
}
const int SumCube(const Cube & c1,const Cube c2){
return c1.volume()+c2.volume();
}

int main(int argc, const char * argv[]) {
Rectanle r(10, 20);
r.print();
Cube cu(10, 20, 30);
cu.print();
int v=cu.volume();
int p=cu.pare();
cout<<"colume:"<<v<<"pare:"<<p<<endl;
Cube c2(10,5,20);
Cube c3(10,10,20);
Cube c1=mVolume(c2,c3);
//maxVolume(cu,c2);
int b=SumCube(cu,c2);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  对象 class