友元函数_关于友元函数的描述中错误的是

友元函数_关于友元函数的描述中错误的是类的友元函数是定义在类外部,但有权访问类的所有私有成员和保护成员。尽管友元函数的原型有在类的定义中出现过,但友元函数并不是成员函数。 友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。在这种情况下,整个类及其所有成员都是友元。如果要声明函数为一个类的友元,需要在类定义中

友元函数_关于友元函数的描述中错误的是"

类的友元函数是定义在类外部,但有权访问类的所有私有成员和保护成员。尽管友元函数的原型有在类的定义中出现过,但友元函数并不是成员函数。

友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。在这种情况下,整个类及其所有成员都是友元。如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字friend,如下所示:

class Box
{
    double width;
public:
    double length;
    friend void printWidth(Box box);
    void setWidth(double wid);    
};

声明类ClassTwo的所有成员函数作为类的ClassOne的友元,需要在类ClassOne的定义中放置如下声明:

friend class ClassTwo;
/***
friend.cpp
***/
#include<iostream>
using namespace std;

class Box
{
    double width;
public:
    friend void printWidth(Box box);
    void setWidth(double wid);
};

void Box::setWidth(double wid)
{
    width = wid;
}

void printWidth(Box box)
{
    cout << "Width of box : " << box.width << endl;
}

int main()
{
    Box box;
    
    box.setWidth(10.0);
    printWidth(box);
    return 0;
}

运行结果:

exbot@ubuntu:~/wangqinghe/C++/20190807$ ./friend

Width of box : 10

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

  1. 要访问非static成员时,需要对象作为参数;
  2. 要访问static成员或者全局变量时,不需要对象作为参数;
  3. 如果做参数的对象是全局对象,则不需要对象做参数。

友元类的使用

/***
classfriend.cpp
***/
#include<iostream>
using namespace std;

class Box
{
    double width;
public:
    friend void printWidth(Box box);
    friend class BigBox;
    void setWidth(double wid);
};

class BigBox
{
public:
    void Print(int width, Box &box)
    {
        box.setWidth(width);
        cout << "Width of box: " << box.width << endl;
    }
};

void Box::setWidth(double wid)
{
    width = wid;
}

void printWidth(Box box)
{
    cout << "Width of box : " << box.width << endl;
}

int main()
{
    Box box;
    BigBox big;
    
    box.setWidth(10.0);

    printWidth(box);

big.Print(20,box);
    return 0;
}

运行结果:

exbot@ubuntu:~/wangqinghe/C++/20190807$ ./classfriend

Width of box : 10

Width of box: 20

今天的文章友元函数_关于友元函数的描述中错误的是分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/50580.html

(0)
编程小号编程小号
上一篇 2023-09-02
下一篇 2023-09-02

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注