C++友元
友元以关键字friend开始,只能出现在类定义的内部。
友元可以是普通的成员函数,或前面定义的其他类的成员函数,或整个类。
关于友元的几个问题:
1.必须先定义包含成员函数的类,才能将成员函数设为友元。
2.类和非成员函数就不需要预先声明。
3.重载函数需要针对每一个函数都进行友元定义。
以下是两个例子:
1.友元引入的类和函数,可以相当于已经声明过了。
class X{
friend class Y;
friend void f(){/*定义内容*/}
}
class Z{
Y *ymem;
void g(){return ::f();}
};2.关于上面问题1的示例:
#include<string>
#include<iostream>
class Boo;
class Foo{
private:
std::string s;
public:
void foo1(std::string);
Foo(std::string ss = "harry Potter"):s(ss){};
};
class Boo{
private:
friend void Foo::foo1(std::string);
int boo_cnt;
public:
Boo(int i = 1): boo_cnt(i){}
};
void Foo::foo1(std::string ss){
Boo b = Boo(7);
std::cout << s << std::endl;
s = ss;
std::cout << b.boo_cnt << std::endl;
}
int main(void){
Foo f = Foo();
std::string ss("liino");
f.foo1(ss);
return 1;
}
浙公网安备 33010602011771号