优秀的编程知识分享平台

网站首页 > 技术文章 正文

C++友元函数

nanyue 2025-01-08 16:18:55 技术文章 6 ℃

友元函数的访问权限

友元函数是能访问类的所有成员的普通函数

关键字friend用来声明友元函数

类的友元函数享有该类成员的访问权

不允许将构造函数、析构函数和虚函数声明为友元函数

友元函数在类中的声明

friend 函数原型;

它本身不是类成员函数。

使用友元函数的优缺点

优点:能够提高效率,表达简单、清晰。

缺点:友元函数破环了封装机制,尽量不使用友元函数,除非不得已的情况下才使用友元函数。

友元函数的参数

因为友元函数没有this指针,则参数要有三种情况:

要访问非static成员时,需要对象做参数;

要访问static成员或全局变量时,则不需要对象做参数;

如果做参数的对象是全局对象,则不需要对象做参数;

友元函数的位置

因为友元函数是类外的函数,所以它的声明可以放在类的私有段或公有段且没有区别。

全局函数作为友元函数

class MyLine

{

public:

MyLine(int x1, int y1, int x2, int y2);

~MyLine();

class Point

{

public:

Point(int x,int y);

~Point();

void printPoin();

private:

int x;

int y;

};

private:

Point p1, p2;

friend void func(MyLine& obj);

};


MyLine::MyLine(int x1, int y1, int x2, int y2):p1(x1,y1),p2(x2,y2)

{

}

MyLine::~MyLine()

{

}

MyLine::Point::Point(int x, int y)

{

this->x = x;

this->y = y;

}

MyLine::Point::~Point()

{

}

void MyLine::Point::printPoin()

{

cout << "x = " << x << ", y = " << y << endl;

}


void func(MyLine& obj)

{

obj.p1.printPoin();

obj.p2.printPoin();

}


int main(int argc, char *argv[])

{

MyLine line(1, 2, 3, 4);

func(line);

return EXIT_SUCCESS;

}

Tags:

最近发表
标签列表