簡體   English   中英

C ++將對象傳遞給函數

[英]C++ passing object to functions

題:

您使用什么語法使同一個類的兩個對象在各自的功能中相互交互?

我在班級士兵中有兩個對象。 類函數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;
            }
    }
};

您需要傳遞被攻擊士兵的引用 ,如下所示:

/** Attack a target soldier
@param[in] target soldier to be attacked
*/
int attack( soldier& target )
{
  ...

順便說一句,除非您使用x,y和z坐標處理幾何問題,否則不要使用像y這樣的參數名稱。 有意義的參數名稱可省去很多麻煩!

您使用什么語法使同一個類的兩個對象在各自的功能中相互交互?

從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是幫助人們記住面向對象的原理,即將數據與在該對象上運行的功能捆綁在一起... Martin Fowler

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM