由于疫情,网课不听,期末狂补时期,个人小测试的时候发现了一个问题,
我先测试了友元函数:
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 故会调用拷贝构造函数,拷贝出来的类会传入该友元函数,同时,该友元函数调用完成时,之前拷贝出来的类也会被析构,嗯,很有意思的玩意儿,感觉能整点好玩的。
感觉可能主要是因为参数列表中有类,所以会调用拷贝构造函数,先记下来,得空再来测试。
以上是个人的一点想法,如果有不对的地方和比较清楚的朋友,希望可以帮我指正和说明,十分感谢!!!
溜了溜了,继续复习了