首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-02-27 
如何间接访问类成员的成员类的定义大约如下,数据成员都private,怎样访问和改变(a.bMen).IDclassB{public:

如何间接访问类成员的成员
类的定义大约如下,数据成员都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;
}

热点排行