小众知识

首页 > 正文

请教高手!这种情况下,怎样取得对象的属性值?

别人先声明一个类,如下:
class CStudent{
int ID;
char* name;
int age;...//注意,由于封装,我不知道这些属性,排除了switch方法的可能性
}
再定义一个对象,CStudent A.现在,有一个函数传来这个类的属性的
字符串,比如name,or age,请问我怎样得到对象A的name值?
 

 Frank001 发表于:2003-02-22 20:36:37
得分:0 

你的意思是不是读取对象A的name值啊,
如果name是pubilc的话,A.name这样的方式就可以得到了,
要是如你所说的那样,你不知道有name这个属性的话,一般的IDE会自动给出pubilc的属性和成员函数。
如果name是private的话,那就得通过pubilc成员函数来读取,如果CStudent类例没有可以读取name的pubilc成员函数的话。那就没戏了。 

 taowen2002 发表于:2003-02-22 23:00:35
得分:0 

不行吧。我的看法是对像在编译的时候已经丢掉了实际的名字,只剩下了地址。而读取哪个属性是运行的时候得到的。其间(属性名,属性在对象中的offset)没有办法再联系起来了。一个不好的办法,就是再建立一个字典对应属性名和地址(或者是存取属性的函数指针)。 

 runner001_cn 发表于:2003-02-22 23:30:36
得分:0 

1.定义一个友员函数
2.定义一个struct ccc{
int id;
char *name;
int age;
}aa;
重载CStudent中的"=",返回ccc类型
3. CStudent *p=new CStudent;
char *a;
a=(char *)p;
按位访问a
浅见。 

 topfeelings 发表于:2003-02-23 10:31:31
得分:0 

taowen2002的理解是对的,但是目前的情况是每次传来的字符串都是随机的,而且我不知道类中的属性,所以无法建立对应字典!各位再想想高招,我出100分! 

 zengpan_panpan 发表于:2003-02-23 21:32:50
得分:0 

那就自己做字典了。

#include 
#include 
using namespace std;
typedef pair map_pair;
struct comp_key
{
        bool operator()(const map_pair &a, const map_pair &b) const
        {
                return a.first < b.first;
        }
};
class CStudent
{
        typedef set map_set;
        map_set data;
public:
        const string get_prop (const string &key)
        {
                map_set::iterator it = data.find(map_pair(key, string()));
                return it == data.end() ? string() : (*it).second;
        }
        void set_prop(const string &key, const string &value)
        {
                map_pair mp = map_pair(key, value);
                map_set::iterator it = data.find(mp);
                if (it != data.end()) data.erase(it);
                data.insert(mp);
        }
};
main()
{
        CStudent st;
        st.set_prop("name", "haha");
        st.set_prop("gender", "male");
        cout << st.get_prop("name") << endl;
        cout << st.get_prop("gender") << endl;
        st.set_prop("gender", "female");
        cout << st.get_prop("name") << endl;
        cout << st.get_prop("gender") << endl;
}

 superzjx2000 发表于:2003-02-24 10:53:11
得分:0 

哥们  你是不是连头文件都没有啊
那就废了 答案是不可能
办法是  去问问那个类的作者  他的 class declareation 是什么 

 cpunion 发表于:2003-02-25 11:51:31
得分:0 

首先对设计这个类的人提出批评!

你的应用实际上是一种自动化应用,在项目初期就应该考虑好。 

 topikachu 发表于:2003-02-25 15:37:03
得分:0 

作成自动化咯,还要实现IDispatch接口
有的麻烦了:) 

上一篇:请高手帮忙。
下一篇:谁有《设计模式》的电子版?

分享到: