有两个不同的类 a 与 b有一个相同的数据结构,问:1)a类要读取b类结构里的数据,或a类里结构里的数据写到b类结构里的数据?
2)b类要读取a类结构里的数据,或b类里结构里的数据写到a类结构里的数据?
它们之间如何互相交换数据?//a.h
struct XYZ
{
long X;
long Y;
long Z;
}first;//a.cpp
=============================================
//b.h
#include “a.h”
2)b类要读取a类结构里的数据,或b类里结构里的数据写到a类结构里的数据?
它们之间如何互相交换数据?//a.h
struct XYZ
{
long X;
long Y;
long Z;
}first;//a.cpp
=============================================
//b.h
#include “a.h”
{
long X;
long Y;
long Z;
}first;
即可
{
long X;
long Y;
long Z;
}first;
即可" 意思说相当于一个公共变量,这肯定可以,==========================================================
我到想把这数据结构,构成各自类的私有结构,封装起来,用它们的公共方法如何实现
互相交换数据?
{
long X;
long Y;
long Z;
}first; class A{
...;
XYZ * hItem;
};class B{
...;
XYZ * hItem;
};XYZ item;
A m_a;
B m_b;
m_a.hItem=m_b.hItem=&item;//Do something you wanna do
.....
如下:
class A{
...;
struct XYZ
{
long X;
long Y;
long Z;
}
};class B{
...;
struct XYZ
{
long X;
long Y;
long Z;
}
}; 这样是否安全?,可以相互交换数据吗?
如下:
class A{
...;
struct XYZ
{
long X;
long Y;
long Z;
}
};class B{
...;
struct XYZ
{
long X;
long Y;
long Z;
}
}; 这样是否安全?,可以相互交换数据吗?
class a
{
friend class b;
friend void c();
};
b、c都是a的友元,在b类中或者c函数中可以访问a的私有成员。
1.1 使用友元函数
令class A为class B的友元类,或者A的某个成员函数成为B的友元函数,由于友元不具有对称性,所以此时B并不能作为A的友元类访问A的数据。
这里,若使A的某个成员函数成为B的友元,我们假定这个成员函数如下定义
int A::GetDatas()
{
//Todo:Add your real code here;
return -1;
}
那么你应写出如下代码
class B
{
//other Datas or Function of class B
friend int A::GetDatas();
};
这里,域名指示符::指出友元函数GetDatas()是A的成员函数。
这时,若要求B也要访问A的数据,只需仿照上面将B的成员函数在A中置为友元。
1.2 使用友元类
对如上代码作修改得
class A
{
//Attributes of A
};
class B
{
//other Datas or Function of class B
friend class A;
};
这样,使用A既可以访问B的数据。
2. 使用引用
这时,只需写出如下定义的成员函数即可。
int A::GetDatas(B& DesBuffer)
{
DesBuffer.DataBuffer = Data;//Data in class A is the datas you want.
return -1;
}int B::GetDatas(A& DesBuffer)
{
DesBuffer.DataBuffer = Data;//Data in class B is the datas you want.
return -1;
}
1.1 使用友元函数
令class A为class B的友元类,或者A的某个成员函数成为B的友元函数,由于友元不具有对称性,所以此时B并不能作为A的友元类访问A的数据。
这里,若使A的某个成员函数成为B的友元,我们假定这个成员函数如下定义
int A::GetDatas()
{
//Todo:Add your real code here;
return -1;
}
那么你应写出如下代码
class B
{
//other Datas or Function of class B
friend int A::GetDatas();
};
这里,域名指示符::指出友元函数GetDatas()是A的成员函数。
这时,若要求B也要访问A的数据,只需仿照上面将B的成员函数在A中置为友元。
1.2 使用友元类
对如上代码作修改得
class A
{
//Attributes of A
};
class B
{
//other Datas or Function of class B
friend class A;
};
这样,使用A既可以访问B的数据。
2. 使用引用
这时,只需写出如下定义的成员函数即可。
int A::GetDatas(B& DesBuffer)
{
DesBuffer.DataBuffer = Data;//Data in class A is the datas you want.
return -1;
}int B::GetDatas(A& DesBuffer)
{
DesBuffer.DataBuffer = Data;//Data in class B is the datas you want.
return -1;
}