2013-06-28 112 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()功能,或(更好)流输出操作者<<)。

至于“我怎么能要求用户输入他的名字并在播放器名称中输入”,流提取操作符可能对此很有帮助。