有经验的朋友进来看看吧

lily604 2008-10-13 11:33:59
这个问题一句话说不明白,所以没有标题呵呵

具体问题是:一个表中中有几个属性,每个属性对应数量不等的值。比如属性A{1,2} B[1,2} C{1,2,3,4} 等等
表的一行对应所有的属性及属性的特定值。
我想根据属性值把这个表分为几个表,比如根据A分类,就把A=1的数据放进一个表,A=2的数据放进另一个表,这样就分成了两个表。
我想实现运行时识别属性,再根据属性分类。
class InitializeAttr
{
char label
int value[]
}
class InitializeA:public class InitializeAttr
{
char label='A';
value[0]=1;
value[1]=2;
}
class InitializeC:public class InitializeAttr
{
char label='C';
value[0]=1;
value[1]=2;
value[2]=3;
value[3]=4;
}
....................

大概就是这个意思,我怎么才能在运行时候识别属性并且正确把属性赋值呢。
比如取出一个字符,如果是A就按照A属性拆分表。
...全文
186 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yshuise 2008-10-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 lily604 的帖子:]
这个问题一句话说不明白,所以没有标题呵呵

具体问题是:一个表中中有几个属性,每个属性对应数量不等的值。比如属性A{1,2} B[1,2} C{1,2,3,4} 等等
表的一行对应所有的属性及属性的特定值。
我想根据属性值把这个表分为几个表,比如根据A分类,就把A=1的数据放进一个表,A=2的数据放进另一个表,这样就分成了两个表。
我想实现运行时识别属性,再根据属性分类。
class InitializeAttr
{
char label
int value[]
}
c…
[/Quote]
首先要注意基类的设计问题:
基类最好不要有成员数据,这样才非常的灵活。
class InitializeAttr
{
public:
virtual void settype(char* ) = 0;
virtual void setvaule(int* ) = 0;
}
class InitializeA:public class InitializeAttr
{
public:

settype(char m){lable = m ;}
setvaule(int* v){vaule = v ;}
private:
char label;
int value[];
}
class InitializeC:public class InitializeAttr
{
public:
settype(char m){lable = m ;}
setvaule(int* v){vaule = v ;}
private:
char label;
int value[];
}
这个设计就非常的灵活。
chlaws 2008-10-13
  • 打赏
  • 举报
回复
大概理解了你的意思
根据不同的属性创建类 , 并且在创建时建立类型识别表 这样就能完成类型识别所需要的iskindof功能

struct runtimeclass
{
char *classname;
runtimeclass* pbase; //指向它的基类
runtimeclass* next ;
}
class initTab
{
public:
static runtimeclass classname;
virtual runtimeclass* getruntimeclass()const; //用于得到其地址
bool iskindof(const runtimeclass* pclass)const; //用于判断是否属于某一类型
}

class initA
{
public:
static runtimeclass classname;
virtual runtimeclass* getruntimeclass()const;
}
.....
lily604 2008-10-13
  • 打赏
  • 举报
回复
1楼的说方法很像MFC中实现动态类型识别的方法
其实我的问题和这个不太一样
我其实应该是: 属性和值都应该是在编译时期确定的,就是像一张映射表一样。然后动态的部分是,程序中出现哪个属性就根据哪个属性来拆分。就像是去那张映射表中找到对应的项一样,主要是因为可以找到对应属性的取值
帅得不敢出门 2008-10-13
  • 打赏
  • 举报
回复
贴上我的看法
整合成一个派生类就行了,然后用
switch(lable)
{
case 'A'
//........
case 'B'
// .......
case 'C'
//........
}
不过这样的话构造函数也得动态判断构造了。

或者是
struct A
{
int value[2] ;
};
struct B
{
int value[2] ;
};
struct C
{
int value[4] ;
};
直接省略了label然后直接用一个函数初始化它们int value[]数组的值
当然也是用switch了

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧