- 在类(结构体)中需要定义友元函数的原型(前面加friend)
- friend只能在友元函数的原型加,不能在友元函数的实现部分加friend
- 尽管友元函数的原型在类中定义,但不能像调用类成员方法一样调用友元函数
类中定义的操作符函数自定义数据类型默认放在左边,
MyClass operator*(int right)
{
return MyClass(mValue * right);
}
如果想要实现MyClass operator*(int left, MyClass right),就可以使用友元函数,实现如下:
#include使用using namespace std; class MyClass { private: int mValue; public: MyClass(int value) { mValue = value; } void print() { cout << mValue << endl; } // MyClass * xxxx MyClass operator*(int right) { return MyClass(mValue * right); } friend MyClass operator*(int, MyClass); friend void process(); }; MyClass operator*(int left, MyClass right) { return left * right.mValue;//MyClass(left * right.mValue); } void process() { }
int main(int argc, const char * argv[]) {
MyClass result = 20 * MyClass(30) ;
result.print();
return 0;
}
友元函数<<操作符重载
定义一个类:
class MyClass
{
private:
int mValue;
public:
MyClass(int value)
{
mValue = value;
}
};
没有getValue函数,但是想要输出mValue的值,可以使用友元函数<<操作符重载
“<<”在操作符中表示左移两位,还有一种用法用于“cont << ”,可以借助“cont << ”实现mValue 的输出
class MyClass
{
private:
int mValue;
public:
MyClass(int value)
{
mValue = value;
}
friend void operator<<(ostream &os, MyClass &myClass);
friend ostream& operator<<(ostream &os, MyClass &myClass);
};
void operator<<(ostream &os, MyClass &myClass)
{
return os << myClass.mValue;
}
使用:
MyClass myClass(20);
cout << myClass ;
但是一般使用cont<<, 都使用< 将函数返回值设置为ostream&,就可以实现连续输出class MyClass
{
private:
int mValue;
public:
MyClass(int value)
{
mValue = value;
}
friend ostream& operator<<(ostream &os, MyClass &myClass);
};
ostream& operator<<(ostream &os, MyClass &myClass)
{
return os << myClass.mValue;
}
MyClass myClass(20);
cout << myClass << "abc" << endl;



