美文网首页
面向对象(C++) 之 友元函数

面向对象(C++) 之 友元函数

作者: commandLDQ | 来源:发表于2016-10-20 12:05 被阅读0次

背景:在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。为了解决上述问题,提出一种使用友元的方案。

△友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样

友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend。

☆友元函数的参数:
因为友元函数没有this指针,则参数要有三种情况:
要访问非static成员时,需要对象做参数;
要访问static成员或全局变量时,则不需要对象做参数;
如果做参数的对象是全局对象,则不需要对象做参数;

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

☆友元函数和类的成员函数的区别:
成员函数有this指针,而友元函数没有this指针。
友元函数是不能被继承的,就像父亲的朋友未必是儿子的朋友。

以下为一个例子:

#include<iostream>
using std::cout;
using std::cin;
using std::endl;

class CTyre{
    private:
        int radius;
        int width;
    public:
        CTyre(){ cout<<"CTyre contructor"<<endl;}
        ~CTyre(){ cout<<"CTyre destructor"<<endl;}
        //友元函数的声明(在类中)
        friend void CCar(const int &radius,const int &width);
};//别忘了分号

 //友元函数的定义(在类外)
void CCar(int &radius,int &width)
        {
            cout<<"汽车轮胎的半径为:"<<radius<<endl; 
            cout<<"汽车轮胎的厚度为:"<<width<<endl;
        }

int main(){
    int tr,tw;
    cout<<"请输入汽车轮胎的半径:"<<endl;
    cin>>tr;
    cout<<"请输入汽车轮胎的厚度:"<<endl;
    cin>>tw;
    CCar(tr,tw);    
    return 0;
}
作者:华中师范大学 计算机学院 蒲东齐
文本作者才疏学浅,如有错误,请指正!

相关文章

网友评论

      本文标题:面向对象(C++) 之 友元函数

      本文链接:https://www.haomeiwen.com/subject/cxufuttx.html