(C++);动态决定函数的类型(派生类)



我是C++新手,我被困在我的程序中。这是一个模仿棋盘游戏"战舰"的程序。我们得到了要编辑的代码,我们被要求做的一件事是让程序提示你想放下哪种船(目前只有 1 艘船(。

我们得到了一个特定的船级(潜艇(开始,我把它变成了一个舰艇父级。我计划对每种船型使用派生类,但 Game 类下的函数具有原始潜艇类(&submarine((现在是 Ship,因此参数为 &Ship(的参数。我正在尝试弄清楚如何动态决定参数的类型,以便我可以使用放置任何船的函数。

有没有办法做到这一点?我们刚刚学习了父/子类,还没有学习模板,这是我看到的常用方法。我也看到很多虚拟函数用于类似于我的解决方案,但我不太明白这将如何帮助我的坐姿。

下面是我之前讨论过的函数示例(在 Game 类下(:

 bool placePiece(Ship& piece) // Ship is parent class -- want it to be derived class (1 of 5 options) depending on which class is being used
{
    cout << "What coordinate do you want to place the " << toLower(piece.getName()) << " (length "<<piece.getLength()<<") at?n";
    string coordinate = toLower(requeststring());
    cout << "What direction do you want the piece to go? (up, down, left or right)n";
    string direction = toLower(requeststring());
    piece.setPiece(rowCharToInt(getFirstChar(coordinate)), getFirstInt(coordinate)-1, getFirstChar(direction));
    return isValidPlacement(playerBoard, piece);
}

如果需要更多信息,请告诉我!

谢谢

你不需要模板。

我从你的问题中了解了以下内容

  1. 被赋予了潜艇级,你把它改名为
  2. 您计划制作船舶的子类别,例如战列舰潜艇
  3. 您在 Game 类中有一些接受对象的函数,并且你想要动态接受的任何派生类。

正确?

只有当您希望要考虑的类型完全没有关系时,您才需要模板。 这里的情况并非如此。

凭借多态性,您的方法已经能够处理您想要的内容。

考虑一个简单的例子,如下所示

#include <iostream>
class Base {
public:
        int a;
};
class Derived : public Base {
public:
        int b;
};
void doge(Base foo) {
        std::cout << "My a value: " << foo.a << std::endl;
}
int main() {
        Derived d;
        d.a = 5;
        doge(d);
        return 0;
}

请注意 doge 函数如何接受并期望 Base 对象,但我们向其发送 Derived 对象。这是有效的,因为这本质上是由类多态性保证的。

只要根据船的类型,你不做不同的事情,你的方法应该有效。但是,如果是这种情况,最好使 重载函数和强制转换的使用

这也导致了一个称为利斯科夫替换原理的OOP原理。该原则要求您对基类对象和派生类对象进行建模,以便派生类的对象始终可以代表基类。

相关内容

  • 没有找到相关文章

最新更新