C ++将对象传递给函数

时间:2018-08-26 23:32:40

标签: c++ function class object

问题:

您使用什么语法使同一个类的两个对象在各自的功能中相互交互?

我在班级士兵中有两个物体。类函数Attack(y)获取一个对象的current_hp int并减去另一个对象的atk int值。我无法通过这样的参数传递对象名称。显然,这是行不通的,并且代码中进一步的引用也行不通。

背景

我一直在学习在线课程,遇到了一个挑战,应该与我上过的课程相适应。我做到了没有问题,但我回去重新编写了它,同时牢记函数和类。

我找不到任何可以帮助我的信息,所以我来到了这里。我可能正在寻找错误的内容,但是...对此有所帮助,将不胜感激。

class soldier{
private:
    int curent_hp = 0;
    int atk = 0;
    int init = 0;
public:
    bool attacked_yet = false;
    void create_soldier(){
        curent_hp = rand() % 20 + 1;
        atk = rand() % 5 + 1;
        init = rand() % 100 + 1;
    }
       int attack(y){
 // the y here being the one that is being attacked
        int attackroll = rand() % 100 + 1;
        if (attackroll < 30){
            y.curent_hp = y.curent_hp - atk;
            }
    }
};

2 个答案:

答案 0 :(得分:3)

您需要将reference传递给被攻击的士兵,如下所示:

"b4"

顺便说一句,不要使用像y这样的参数名称,除非您要处理x,y和z坐标的几何问题。有意义的参数名称可免除烦恼!

答案 1 :(得分:0)

  

您使用什么语法来使两个相同类的对象交互   彼此在各自的功能上?

在Google中,“语法”定义为

  

...单词和短语的排列以创建格式正确的句子   

在这种情况下,我不确定语法的含义。


作为起点,还有一些要写的东西,

  • 在电信嵌入式系统中,我使用C ++处理工作/保护对。

硬件环境:

  • 几乎所有的工作/保护硬件都是可互换的...只需交换卡插槽即可。

软件环境:

  • 工作卡和保护卡是“ ...同一类的两个对象。”

硬件协同工作和保护卡以实现“快速”响应,并且软件在下一秒内发现了任何操作(硬件进行)。


工作/保护对ctor有影响

a)两张牌的构造都不假设对方的存在。

注意:如果从不安装另一个,则系统仍将正常运行,而不会出现“恢复”行为。

大致类似于只有一名士兵存在时两名士兵永远不会战斗的情况。

b)当控制器代码准备好创建第二对(一对)时,它知道第一张工作/保护卡已经准备好。它仅构造第二个,然后将引用传递给有关第一个同级的最新构造。

c)收到同级引用后,两者的第二个对象将更新两个实例。我通常会在第二张卡片ctor完成后立即引用第二张卡片(无错误)。

注意:在C ++中,如果提供了引用或指针,则同一对象类的兄弟实例可以完全访问另一个对象。


我还为战斗模拟工作做出了贡献(在电信之前)。

如果您的控制器为每个士兵提供刺激,即调用一个功能,则每个士兵可以进一步进行(战斗中的)互动。

您还可能会发现,在收到刺激后,如果一个士兵实例对两个士兵实例都执行与刺激相关的单个动作,则可能会更容易。


在我前一段时间的战斗模拟工作中,所有模拟动作都受到武器射击(在这种情况下为激光信号)的刺激。距离和武器类型(坦克与AR15)影响了命中时的杀伤力(由激光传感器检测到)。

该软件大大简化了,因为每个参与者(以及sim中的节点)既是武器又是目标。

祝您好运。


可能是最终评论:

我通常不将对象传递给函数。相反,我调用对象的功能。关于此问题的文章很多。我可以推荐:

请参阅:https://pragprog.com/articles/tell-dont-ask

另请参阅:https://martinfowler.com/bliki/TellDontAsk.html Tell-Don't-Ask是一个原则,可以帮助人们记住面向对象是关于将数据与在该对象上运行的功能捆绑在一起...     马丁·福勒