2013-06-28 110 views
-2

我有幾個關於我的代碼的問題,請回答他們。我是C++初學者。
我做這個類:C++類,對象並返回

#include <iostream> 
#include <string> 

using namespace std; 

class Enemy{ 
    public: 
     string enemy(string n,int h,int d){ 
      name = n; 
      hp = h; 
      dmg = d; 
      cout << "Enemy name: " << n << " "; 
      cout << "Hit Points: " << h << " "; 
      cout << "Damage: " << d; 
     } 
    private: 
     string name; 
     int hp; 
     int dmg; 
}; 

int main(){ 

    Enemy enemy1; 

    enemy1.enemy("Wolf",10,2); 
} 

當我建立並運行它,我得到這個:

Enemy name: Wolf Hit Points: 10 Damage: 2 

我應該使用enemy function回報如果我使用回報如何打印出name,hp and dmg

爲什麼我不能製造出像敵人enemy2這樣的第二個物體;並打印出第二個敵人像

enemy2.enemy("Blal","324","32");? 

我怎樣才能讓這個相同的功能,但對於像選手名球員:Hit PointsDamage:,我怎麼能要求用戶提供姓名的球員的名字進入吧:

我知道這些問題是愚蠢的,但請回答他們,並對我的英語不好。

+1

程序具有未定義的行爲,因爲成員函數'enemy()'在函數結束時不會返回字符串。除非有一些值要報告給調用者,否則將返回類型更改爲'void',在這種情況下它不會顯示。 – hmjd

+0

爲什麼你不能製造出像敵人enemy2這樣的第二個物體? – spiritwolfform

回答

1

除非您想返回數據,否則不需要使用返回值 - 因此在這種情況下,要麼將返回類型設置爲void,要麼將函數更新爲構造函數(這可能是您在此處想要的) 。

2

讓我們把它分解一下:

我應該用在敵人函數返回?

我相信你的編譯器警告過你。爲什麼?讓我們來看看enemy函數簽名:

string enemy(string n,int h,int d){ 

所以它需要一個string和兩個int s,而應該返回一個string。雖然你不回報任何東西!

如果我使用return如何輸出名稱,hp和dmg?

完全一樣,你在你的函數中做它,除非你需要把它全部放到一個字符串中。使用stringstream最簡單。

// remember to 
#include <sstream> 

string enemy(string n,int h,int d) { 
    // initialize variables 
    // ... 
    std::stringstream s; 
    s << "Enemy name: " << n << " "; 
    s << "Hit Points: " << h << " "; 
    s << "Damage: " << d; 
    // here we return the data 
    return s.str(); 
} 

但是,這不是正確的方法。它看起來像你想創建一個構造函數。我不想爲你寫的所有代碼,而是我要你:

  1. 閱讀有關構造函數,它們是什麼,以及如何將它們
  2. 斯普利特enemy函數編寫成兩個部分:初始化並打印出來。
  3. 將所述第一部分在一個構造函數和所述第二部分在任一tostring()功能,或(更好)流輸出操作者<<)。

至於「我怎麼能要求用戶輸入他的名字並在播放器名稱中輸入」,流提取操作符可能對此很有幫助。