【问题标题】:2 classes, both have pointers. need them to either point to a type of themselves, or a type of the other2个类,都有指针。需要他们要么指向自己的类型,要么指向他人的类型
【发布时间】:2014-10-15 13:00:12
【问题描述】:

我正在制作行业链接列表。扇区可以是 directorySector 或 userSector 类型。第一个扇区始终是目录扇区,其余的直到运行时才知道。如何将 directorySector 链接到 userSector?我没有示例代码,因为 directorySector 类型的扇区并不总是指向另一个 directorySector。提前致谢!

struct directorySector{
directorySector *ptr;
};

【问题讨论】:

  • 创建一个class Sector { Sectror* ptr };,让directorySectoruserSector 从中派生。
  • ^^ 是的。如果扇区需要通过它们的指针提供一些功能,请通过 Sector 类上的抽象虚函数传递它。比如:virtual [type] function([args]) = 0;
  • 谢谢伊戈尔,我第一次尝试过,但我一定做错了。再次尝试,它的工作原理。非常感谢!
  • 哦,我发现了另一个问题。所以我按照你说的做了,但是我有以下代码,当我执行 sect.FRWD->free 时,它​​表示父级没有名为 free 的成员。 Free 位于子 userDirectory 结构中。我如何引用那个而不是父级?直接教派; sect.FRWD = 新用户Sect; sect.FRWD->免费;

标签: c++ pointers types casting


【解决方案1】:

您可以使用多态性通过基类的指针指向子类。您需要确保跟踪类型,以免弄乱类型并访问无效的数据类型。您可能需要转换这些值才能返回到子类。

class sector
{
   sector* sectorPtr;
};

class directorySector : public sector
{
   /*WhatEver*/
};

class userSector : public sector
{
   /*Whatever*/
};

int main()
{
   sector mySector;
   directorySector myDirectorySector;
   userSector myUserSector;
   mySector.sectorPtr = &myDirectorySector;
   mySector.sectorPtr = &myUserSector;

   return 0;
}

更多信息:

http://www.cplusplus.com/doc/tutorial/polymorphism/

【讨论】:

  • 类定义后缺少;。使用公共继承。修正拼写错误sserSector -> userSector
  • @krillgar - 下次,以自定义原因拒绝建议的编辑,然后访问问题并进行适当的编辑。潜在的编辑需要知道改变编码风格是不可接受的。
  • 好的,感谢您的提醒。这不是我以前没有遇到过的情况。
  • 感谢您的更改!很抱歉!
  • 我遇到了与顶级解决方案相同的问题。当我使用 mySector.sectorPtr-> number 时; (假设 userSector 有一个名为 number 的成员),我收到错误“扇区没有名为 number 的成员”,它仍在基类中搜索。我需要它来取消引用 userSector 中的数字数据成员。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 2023-04-02
  • 2017-12-05
  • 2013-10-18
  • 2012-12-26
相关资源
最近更新 更多