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