友元函数
1.友元函数必须在一个类中声明,拍拍胸脯,告诉它是我的朋友,既然是朋友,那么可以使用和访问我的资源(包括私有,公有,保护)。
2.友元函数访问我的资源,通过什么方式呢? 只能通过对象变量,不能通过类的变量。 实现方式,以参数方式传递对象,进入友元函数。
3.既然是友元函数,那么与成员函数有区别,如何使用呢? 不能通过成员符号,例如(->, . , ::)使用该函数。
友元函数示例:
#include <iostream>
#include <pthread.h>
using namespace std;
class A{
private:
int i;
public:
A(int j);
friend void * display (void *xxx);//友元函数声明
void foo();
};
A::A(int j):i(j)
{
}
void * display (void *arg)
{
A * a;
if ( arg == 0 )
{
return 0;
}
a = static_cast<A *>(arg);
cout<<"display:"<<a->i;
return 0;
}
void A::foo()
{
pthread_t tid;
pthread_create(&tid,NULL,display,(void *)this);
pthread_join(tid, NULL);
}
int main()
{
A *a = new A(1);
a->foo();
display(a);
::display(a);
//A::display(a);
//a->display(a);
return 0;
}
1.友元函数必须在一个类中声明,拍拍胸脯,告诉它是我的朋友,既然是朋友,那么可以使用和访问我的资源(包括私有,公有,保护)。
2.友元函数访问我的资源,通过什么方式呢? 只能通过对象变量,不能通过类的变量。 实现方式,以参数方式传递对象,进入友元函数。
3.既然是友元函数,那么与成员函数有区别,如何使用呢? 不能通过成员符号,例如(->, . , ::)使用该函数。
友元函数示例:
#include <iostream>
#include <pthread.h>
using namespace std;
class A{
private:
int i;
public:
A(int j);
friend void * display (void *xxx);//友元函数声明
void foo();
};
A::A(int j):i(j)
{
}
void * display (void *arg)
{
A * a;
if ( arg == 0 )
{
return 0;
}
a = static_cast<A *>(arg);
cout<<"display:"<<a->i;
return 0;
}
void A::foo()
{
pthread_t tid;
pthread_create(&tid,NULL,display,(void *)this);
pthread_join(tid, NULL);
}
int main()
{
A *a = new A(1);
a->foo();
display(a);
::display(a);
//A::display(a);
//a->display(a);
return 0;
}