我目前正在遭受脑放屁。我以前做过,但我不记得确切的语法,也看不到我写的代码,因为当时我在另一家公司工作。我有这样的安排:
class P
{
// stuff
};
class PW : public P
{
// more stuff
};
class PR : public P
{
// more stuff
};
class C
{
public:
P GetP() const { return p; }
private:
P p;
};
// ...
P p = c.GetP( ); // valid
PW p = c.GetP( ); // invalid
PR p = c.GetP( ); // invalid
// ...
现在我想让 P 与 PW 和 PR 互换(因此 PW 和 PR 可以互换)。我可能可以摆脱强制转换,但仅在这个模块中,这种代码更改就发生了很多次。我很确定它是一个操作员,但对于我的生活,我不记得是什么。
如何用最少的代码使 P 与 PW 和 PR 互换?
更新:提供更多说明。P 代表 Project,R 和 W 分别代表 Reader 和 Writer。Reader 拥有的只是加载代码 - 没有变量,而 writer 拥有用于简单写入的代码。它需要分开,因为阅读和写作部分有各种管理器类和对话框,这不是项目真正关心的项目文件的操作。
更新:我还需要能够调用 P 和 PW 的方法。因此,如果 P 有一个方法 a() 和 PW 作为方法调用 b() 那么我可以:
PW p = c.GetP();
p.a();
p.b();
基本上是为了使转换透明。