作为序言,这是我在Stack Exchange上的第一篇文章,对不起,如果我的帖子有问题,请告诉我。
我也想说我对C ++相当陌生,我唯一的经验就是我目前在大学里上的课。我试图将我先前编写的一些代码更改为外观更简洁的类和结构。
为了说明一点,我正在与Nine Men's Morris游戏一起做一个项目。我将至少有两个不同类型的球员。不同玩家类别之间的几乎所有事物。唯一的区别在于某些方法的工作方式。
由于播放器类型之间的相似性,我编写了一个称为Player的基类,并制作了两个派生类。基本的Player类的定义与此类似:
Class Player {
protected:
vector<Piece> pieces_;
MillSet mill_set_;
Stats statistics_;
virtual void initialize(Player&)=0;
virtual void normal(Player&)=0;
virtual void fly(Player&)=0;
};
还有其他受保护的方法和公共方法,但是这些是将在每个派生类之间更改的主要方法。我无法在基类中定义“虚拟虚空”函数,因此我读到将其标记为“ = 0;”。表示它实际上不在基类中。
无论如何,我已经定义了一个派生类:
class RandomPlayer : public Player {
private:
void initialize(Player& other_player);
void normal(Player&);
void fly(Player&);
Piece& choose_to_move(Player&);
Piece& choose_to_remove(Player&);
public:
RandomPlayer() : Player() {};
};
将Player&作为参数的函数需要访问一些在基类中定义的受保护成员和方法。我在网上看到,可以引用一个对象的基类。我希望将Player&传递给派生类的方法可以让我访问Player的受保护方法,但是事实并非如此。
我对这个问题的解决方法有问题吗?还是缺少什么?我有办法解决这个问题吗?我希望无论传入的是哪种播放器,都可以调用传入的播放器类型的受保护成员和方法。
我对OOP还是陌生的,但是我喜欢它的想法并且想学习它。我将帖子标记为“多态”,但是我对此想法还有些模糊,因此请让我知道它作为标签是否有意义。
谢谢您的帮助。