友元函数与创建

场景:一个类将复制构造函数和赋值运算符都设置为私有,那么这个时候怎么去创建使用这个类呢?

背景:在看RTTI(运行时转换)时看到的百度百科简介,如下面代码,type_info类的复制构造和赋值运算法都被设置为私有,用户没有办法直接创建使用这个类。

class type_info
{
private:
    type_info(const type_info&);
    type_info& operator=(const type_info&);//type_info类的复制构造函数和赋值运算符是私有的。
public:
    virtual ~type_info();//析构函数
    bool operator==(const type_info&)const;//在type_info类中重载了==运算符,该运算符可以比较两个对象的类型是否相等。
    bool operator!=(const type_info&)const;//重载的!=运算符,以比较两个对象的类型是否不相等
    const char* name()const;//使用得较多的成员函数name,该函数返回对象的类型的名字。前面使用的typeid(a).name()就调用了该成员函数
    bool before(const type_info&);
};

但是通过函数typeid()就可以使用这个类。

那typeid函数怎样创建type_info类的对象?

友元函数

typeid()函数返回一个type_info类对象的引用,即形式为const type_info& typeid();

当typeid是type_info的友元函数时即可实现创建并返回引用。

const type_info&  typeid(){   /*伪代码*/
    type_info  ty;      
    return ty;
}

 原理如下:

class A{
    private:
            A(){} 
            A(const A&){}
            A& operator =(const A&){} 
            friend A& f();
};         

其中f()函数是类A的友元函数,在函数f()中可以创建类A的对象。其返回值是A的引用

A& f(){
       A ma; 
       cout<<”f”<<endl; 
       return ma;
}

问题:

1 - 这里函数返回的ma和&ma的区别

2 - 函数返回临时变量怎么处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值