什么是友元?为什么要引入友元?解释友元函数和友元类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是友元?为什么要引入友元?解释友元函数和友元类相关的知识,希望对你有一定的参考价值。
参考技术A 答案:和继承一样,可以说子继承父,友元就是朋友,它不是类的组成部分,因此被称为直接函数调用。友元函数不能隐式访问类成员,而必须将成员操作符用于作为参数传递的对象。友元函数要在一个类体内说明,形式为:friend类型名友元函数名(形参表);然后在类体外对友元函数进行定义,定义的格式和普通函数相同,但可以通过对象作为参数直接访问对象的私有成员;友元函数说明如下:①.必须在类的说明中说明友元函数,说明时以关键字friend开头,后跟友元函数的函数原型,友元函数的说明可以出现在类的任何地方,包括在private和public部分。②注意友元函数不是类的成员函数,所以友元函数的实现和普通函数一样,在实现时不用”::”指示属于那个类,只有成员函数才使用”::”作用域符号。③友元函数不能直接访问类的成员,只能访问对象成员。④友元函数可以访问对象的私有成员,但普通函数不行;⑤调用友元函数时,在实际参数中需要指出要访问的对象!本回答被提问者采纳练习友元类和友元函数
#include <iostream> using namespace std; class Circle; class Point { private: float x; float y; public: Point(); Point(float a,float b); friend class Circle; friend const Point middle(const Point &u,const Point &v); void print()const; }; Point::Point():x(0.0),y(0.0) { cout << "Defalt constraction is called " << endl; } Point::Point(float a,float b):x(a),y(b){} void Point::print()const { cout << " x: " << x << " y " << y <<endl; } const Point middle (const Point &u,const Point &v ) { return Point ((u.x+v.x)/2.0,(u.y+v.y)/2.0); } class Circle { private: float radius; Point center; public: Circle(); Circle& move(float a,float b); void print()const; }; Circle::Circle():radius(0.0) { center.x = 0.0; center.y = 0.0; } Circle&Circle::move(float a,float b) { center.x += a; center.y += b; return *this; } void Circle::print()const { center.print(); cout << "radius: " << radius <<endl; } int main() { Point p1(1.0,2.0); Point p2(3.0,4.0); p1.print(); p2.print(); cout << "the diffrence between the two point is:" << endl; middle(p1,p2).print(); Circle c; c.print(); cout << "move the center:"<< endl; c.move(10.0,10.0); c.print(); cout << "Hello World!" << endl; return 0; }
以上是关于什么是友元?为什么要引入友元?解释友元函数和友元类的主要内容,如果未能解决你的问题,请参考以下文章