-
C++友元函数
2017-02-08 20:18:04C++友元函数#include <cmath> #include <iostream> using namespace std; class Point { public: Point(double xx,double yy) { x=xx; y=yy; } void GetXY() const; friend double Distance(const Point& a,const Point& b); // 运算符重载 friend ostream& operator<< (ostream& os,const Point& p); private: double x,y; }; void Point::GetXY() const { cout<<"("<<x<<","<<y<<")"<<endl; } double Distance(const Point& a,const Point& b) // 注意函数名前未加类声明符 { double length; // 它可以引用类中的私有成员 length=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); return length; } ostream& operator<< (ostream& os,const Point& p) { return os<<"("<<p.x<<","<<p.y<<")"; } int main(void) { Point p1(3.0,4.0),p2(6.0,8.0); // 成员函数的调用方法,通过使用对象来调用 p1.GetXY(); p2.GetXY(); // 运算符重载 cout<<p1<<endl; cout<<p2<<endl; // 友元函数的调用方法,同普通函数的调用一样,不要像成员函数那样调用 double d = Distance(p1,p2); cout<<d<<endl; system("pause"); return 0; }
-
C++ 友元函数
2018-05-06 20:32:09C++ 友元函数 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。 友元可以是一个函数,该函数...C++ 友元函数
类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。
友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。
如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend,如下所示:
class Box
{
double width;
public:
double length;
friend void printWidth( Box box );
void setWidth( double wid );
};
声明类 ClassTwo 的所有成员函数作为类 ClassOne 的友元,需要在类 ClassOne 的定义中放置如下声明:
friend class ClassTwo;
请看下面的程序:#include <iostream> using namespace std; class Box { double width; public: friend void printWidth( Box box ); friend写在前面 void setWidth( double wid ); }; // 成员函数定义 void Box::setWidth( double wid ) { width = wid; } // 请注意:printWidth() 不是任何类的成员函数 void printWidth( Box box ) { /* 因为 printWidth() 是 Box 的友元,它可以直接访问该类的任何成员 */ cout << "Width of box : " << box.width <<endl; } // 程序的主函数 int main( ) { Box box; // 使用成员函数设置宽度 box.setWidth(10.0); // 使用友元函数输出宽度 printWidth( box ); return 0; }
当上面的代码被编译和执行时,它会产生下列结果:
Width of box : 10 -
c++友元函数
2021-02-02 09:38:28c++允许友元函数访问类中的私有数据,无this指针。 其他类,类的成员函数,全局函数都可用作为友元函数。 声明时,前面加关键字friend。 全局函数作为友元函数 一个类的某个成员函数作为另一个类的友元。 要访问...友元的种类
1.友元函数
2.友元类
3.友元成员函数友元函数
- c++允许友元函数访问类中的私有数据,无this指针。
- 其他类,类的成员函数,全局函数都可用作为友元函数。
- 声明时,前面加关键字friend,只有在类声明的原型中才能使用friend关键字,除非函数定义也是原型,否则,不能在定义中使用friend关键字。
全局函数作为友元函数
一个类的某个成员函数作为另一个类的友元。
- 要访问哪一个类中的私有数据成员,就在哪个类中声明friend函数。
一个类的所有成员函数作为另一个类的友元。
- 要访问哪一个类中的私有数据成员,就在哪个类中声明friend类。
友元函数继承
- 由于友元函数不是成员函数,所以不能继承,可以通过强制类型转换,派生类引用或指针转为基类引用或指针,然后使用转换后的指针或引用来调用基类的友元函数。
std::ostream & operator<<(std::ostream & os, const baseDMA & rs) { os << "Label: " << rs.label << std::endl; os << "Rating: " << rs.rating << std::endl; return os; }
std::ostream & operator<<(std::ostream & os, const hasDMA & hs) { os << (const baseDMA &) hs; /强制类型转换为基类对象 os << "Style: " << hs.style << std::endl; return os; }
- 也可以使用dynamic_cast<转换类型>进行强制类型转换(这种形式最佳):
os << dynamic_cast<const baseDMA &> (hs);
-
c++ 友元函数
2020-04-23 10:13:18尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。 友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。 如果要...定义
类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。
友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。
如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend,如下所示:
题目:
定义Boat和Car两个类,二者都有一个weight属性,定义它们的一个友元函数totalWeight( ),计算二者的重量和。
代码如下:
#include <iostream> #include <string.h> #include <map> #include<queue> #include<unordered_map> using namespace std; #pragma warning(disable:4996) class Car;//先声明 /*boat类*/ class Boat { int weight; public: void setWeight(int setwei); int getWeight(); friend int totalWeight(Boat boat, Car car); }; // 成员函数定义 void Boat::setWeight(int setwei) { weight = setwei; } // 成员函数定义 int Boat::getWeight() { return weight; }; /*car类*/ class Car { int weight; public: void setWeight(int setwei); int getWeight(); friend int totalWeight(Boat boat, Car car); }; // 成员函数定义 void Car::setWeight(int setwei) { weight = setwei; } // 成员函数定义 int Car:: getWeight() { return weight; } /*计算car和boat的总重量,该函数不是任何类的成员函数*/ int totalWeight(Boat boat,Car car) { return car.weight + boat.weight; } int main() { Boat boat; Car car; //使用成员函数设置 boat.setWeight(10); car.setWeight(20); cout<<"boat的重量是:"<<boat.getWeight()<<endl; cout<<"car的重量是:"<<car.getWeight()<<endl; //使用友元函数输出 cout << "boat与car的总重量:"<<totalWeight(boat,car)<< endl; }
结果如下:
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
MySQL 数据库权限管理(用户高级管理和精确访问控制)
-
朱老师c++课程第3部分-3.5STL的其他容器讲解
-
基于SSM实现的房屋租赁系统【附源码】(毕设)
-
PHP深入理解-PHP架构布局
-
PyTorch hub 模块
-
【正点原子】I.MX6U网络环境TFTP&NFS搭建手册V1.2.pdf
-
【考研初试】安徽建筑大学703艺术设计理论考研真题库资料
-
php解析url并得到url中的参数及获取url参数的四种方式
-
装备制造行业智能制造方案.pptx
-
如何解决数据库提示只有只读权限,无法操作的问题 what
-
php数组函数大全
-
学习软件测试必备的网站清单,建议收藏!
-
MySQL 高可用(DRBD + heartbeat)
-
thymeleafth的Spring Security标签控制
-
第三章 C语言 PTA循环控制——作业-答案.html
-
物联网基础篇:快速玩转MQTT
-
【爱码农】C#制作MDI文本编辑器
-
朱老师C++课程第3部分-3.6智能指针与STL查漏补缺
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)