读书人

怎么间接访问类成员的成员

发布时间: 2012-02-27 10:00:22 作者: rapoo

如何间接访问类成员的成员
类的定义大约如下,数据成员都private,怎样访问和改变(a.bMen).ID;

class B
{
public:
Get_ID();
Set_ID(int);
private:
int ID;
};

class A
{
public:
Get_bMen();
Set_bMenID(int);
private:
B bMen;
};

int main()
{
A a;

return 0;
}


[解决办法]
1. LZ, 我觉得你要改变思维方式, 精化对封装的认识. class A 为什么要知道 class B 的成员是什么呢 ? 我们就是不要知道, 才能写出优良品质的程序. A 只应该依赖 B, 而不应该再依赖 B 的实现细节(成员ID).

2. 因此, 我的建议是, Set_bMen(B const & b), 而非 Set_bMenID.

3. 进一不说, 当一个类的接口, 仅仅是Set_XXmember, Get_XXmember, 这强烈表示这个类是无意义的, 接口设计不良. 这里, 我无法进一步说明, 因为你的A, B是个太广泛的概念. 我只能暗示你, A, B的主要接口方法应该有非常明确的功能.

4. 回到你这个设计上. 其实, 只要A::Set_bMenID(int)如下实现即可:
void A::Set_bMenID(int i) {
bMen.Set_ID(i);
}
[解决办法]
就是下面这个,我已经调试好了,楼主你可以直接拿去用

#include <iostream>
using namespace std;

class B
{
public:
B(int x=0):ID(x){} //缺省构造函数,默认ID为0
int Get_ID(){return ID;}; //返回int
void Set_ID(int i){ID=i;};//无返回,ID为i
private:
int ID;
};

class A
{
public:
B& Get_bMen(); //返回类型是B&
void Set_bMenID(int i);
private:
B bMen;
};

B& A::Get_bMen() //定义这个成员函数,让它返回类A内部的私有成员bMen的引用
{
return bMen;
}

int main()
{
A a;

B b=a.Get_bMen();
cout < <b.Get_ID() < <endl; //由B的缺省构造函数设定的,ID为0


B& b2=a.Get_bMen();
b2.Set_ID(200);
cout < <b2.Get_ID() < <endl; //由Set_ID函数设定的ID为200
return 0;
}

读书人网 >C++

热点推荐