关于友元函数与拷贝构造函数

由于疫情,网课不听,期末狂补时期,个人小测试的时候发现了一个问题,

我先测试了友元函数:


class Boy 
{
    public:
        friend void printName(Boy b);
        Boy(string name): name(name){};
        void getName(){cout<<"getName"<<name<<endl;};

    private:
        string name;
};

void printName(Boy b)
{
    cout<<b.name<<endl;
}
 
 

int main()
{
    Boy feifei("feifei");
    feifei.getName();
    printName(feifei);

    return 0;
}
最后打印了

getNamefeifei

feifei

而后在此基础上测试了拷贝构造函数

在类中添加如下:

  Boy(const Boy& obj){
            name = "obj.name";
            cout<<"拷贝构造函数"<<obj.name<<endl;
            };
        ~Boy(){cout<<"destruct the object"<<name<<endl;}

 结果:

getNamefeifei
拷贝构造函数feifei
obj.name
destruct the objectobj.name
destruct the objectfeifei

所以说明在友元函数调用时,参数中有类Boy 故会调用拷贝构造函数,拷贝出来的类会传入该友元函数,同时,该友元函数调用完成时,之前拷贝出来的类也会被析构,嗯,很有意思的玩意儿,感觉能整点好玩的。

感觉可能主要是因为参数列表中有类,所以会调用拷贝构造函数,先记下来,得空再来测试。

以上是个人的一点想法,如果有不对的地方和比较清楚的朋友,希望可以帮我指正和说明,十分感谢!!!

溜了溜了,继续复习了

猜你喜欢

转载自www.cnblogs.com/firework-hy/p/12984132.html
今日推荐