如何取得父类数据?

dongcat111 2003-03-03 10:30:16
有一个派生类,需要从父类中读取一点数据,但是每次都取不到。
我想可能是派生类运行了父类的构造函数,所以父类原本的数据被清掉了。
有什么办法可以让子类取到数据吗?
...全文
20 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
westar 2003-03-06
  • 打赏
  • 举报
回复
给静态对象初始化的办法:
CObject Game::record;
然后给你的record写一个默认构造函数
dongcat111 2003-03-04
  • 打赏
  • 举报
回复
谢谢楼上的,但是我试过了你的办法是错的!
现在更麻烦的问题是如何给一个静态变量数组开辟空间及初始化??
mldds 2003-03-04
  • 打赏
  • 举报
回复
静态成员必须在代码段定义以分配存储空间,如下:

string record::player_id;
int record::player_iq;
int record::player_weight;
int record::player_confidence;
int record::times;

当然在这时可以用赋值初试化,也可以在其它地方初试化。
allen1981813 2003-03-04
  • 打赏
  • 举报
回复
老子::老子的财产
liu_feng_fly 2003-03-04
  • 打赏
  • 举报
回复
int Game::info.player_confidence = 0;
改成
int info::player_confidence = 0;
这样试试
dongcat111 2003-03-04
  • 打赏
  • 举报
回复
新问题,如果是static record info[20],也就是一个静态结构的数组,又该怎么初始化呢?
我原来的办法行不通了。
dongcat111 2003-03-04
  • 打赏
  • 举报
回复
楼上的,这样更不行啦!编译器认为info不是一个类成员啊。
而如果你初始化int record::player_confidence = 0的话,后面又无法对info的内部数据进行修改。这样读出来的数据总是你初始化的预定数值。
我想了一个比较笨的办法来解决它,我把结构改成一个类,当然所有数据都是public的。
然后自己写了一个带参数的拷贝构造函数,比如record(int ……);在cpp里面调用这个函数来完成初始化。
不过这也太笨了点,体现不出类或者结构的优越,有更好的办法吗?
mgh001 2003-03-03
  • 打赏
  • 举报
回复
Based::data
dongcat111 2003-03-03
  • 打赏
  • 举报
回复
总的有个解决办法……大不了在子类里面再用父类的函数读取一次数据,
但是这样的话有点不太顺畅,有没有比这更好的办法?
wangyangcheng 2003-03-03
  • 打赏
  • 举报
回复
繼承不能滿足你的要求嗎?
dongcat111 2003-03-03
  • 打赏
  • 举报
回复
对了,另外再补充一点,我用同样的手法写了一个例子,
只不过把结构换成了基本类型int,其他是一样的。
但是就通过了,所以我怀疑问题在于初始化基类上。
dongcat111 2003-03-03
  • 打赏
  • 举报
回复
其实是这样的:
我的game是一个基类,另几个类从基类派生。game的作用就是读取记录啊,保存记录啊什么的。所以它有一个静态成员struct record,把game读到的数据保存下来,从而可以为子类所利用。问题就出在如何初始化这个结构呢?

比如我写到:
int Game::info.iq = 0;

这是编译不通过的,该怎么解决?
wshcdr 2003-03-03
  • 打赏
  • 举报
回复
gz
qhgary 2003-03-03
  • 打赏
  • 举报
回复
我没有仔细看你的问题,不过你说子类构造的时候调用了父类的构造函数,清掉了数据,我有点疑惑,如果数据很重要,则可以用static,这样就清不掉,如果是某个父类的对象的数据,你要知道,你继承一个类,得到的子类的一个实例中包含的父类的一套数据结构,不属于任何父类所生成的对象。如果你要得到父类实例的某个数据,只有通过该类的接口实现。
孩皮妞野 2003-03-03
  • 打赏
  • 举报
回复
你知道static是什么意义吗?

这里所有的record对象共享同一份player_id、player_iq、player_weight、player_confidence、times, 好像不应该是这样吧,你说的旧的冲掉新的是指这个吧?

struct record
{
string player_id;
int player_iq;
int player_weight;
int player_confidence;
int times;

record* next;
};



class Game
{
public:
Game();
virtual ~Game();
void New();
bool Load(string);
void Save();
string GetLine();

private:
record* head;
record info;
};

但是这样手工维护单链表是危险的,应该把它放到一个类里面---如果你不想使用标准库里的list的话。
增加另一个类record_list, 来维护节点的增、删、查找等。



dongcat111 2003-03-03
  • 打赏
  • 举报
回复
顺便改一下,那个static是放在public里面的
shornmao 2003-03-03
  • 打赏
  • 举报
回复
因为每个子类的实例化(也就是对象),都包含了一份父类数据(non-static)的副本。
你对类和对象的关系还没有搞清楚,问的问题当然是含混不清,得到的答案也就五花八门了。
dongcat111 2003-03-03
  • 打赏
  • 举报
回复
是啊,我就是用static,但是连编译都通不过啊。
是不是用了结构的问题?
shornmao 2003-03-03
  • 打赏
  • 举报
回复
你要读属于类的数据,必须使用static,static可以支持任何数据类型。
dongcat111 2003-03-03
  • 打赏
  • 举报
回复
struct record
{
static string player_id;
static int player_iq;
static int player_weight;
static int player_confidence;
static int times;
record* next;
};

class Game
{
public:
Game();
virtual ~Game();
void New();
bool Load(string);
void Save();
string GetLine();

private:
record* head;
record info;
};

int Game::info.player_confidence = 0;
int Game::info.player_weight = 0;
int Game::info.player_iq = 0;
int Game::info.times = 0;
string Game::info.player_id = "";
加载更多回复(4)

64,683

社区成员

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

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