(1)补充完整需要的成员函数,使角色能一定的规则行动或改变状态。
#include<iostream>
#include <string>
using namespace std;
class Role
{
public:
void setRole(string nam,int n);
void show();
void attack();
void beAttack();
void eat(int n);
bool isAlived();
private:
string name;
int blood;
bool life;
};
bool Role::isAlived()
{
return life;
}
void Role::setRole(string nam,int n)
{
blood=n;
name=nam;
if(blood>0)
life=true;
else
life=false;
}
void Role::show()
{
cout<<name<<"还剩"<<blood<<"滴血,";
if(isAlived())
cout<<"还活着";
else
cout<<"死掉了";
cout<<endl;
}
void Role::attack()
{
if(isAlived())
blood+=1;
}
void Role::beAttack()
{
if(isAlived())
blood--;
if(blood==0)
life=false;
}
void Role::eat(int n)
{
if(isAlived())
blood+=n;
}
int main( )
{
Role mary;
mary.setRole("Mary",4);
mary.show();
mary.attack();
mary.eat(2);
mary.beAttack();
mary.beAttack();
mary.show();
return 0;
}
(2)设计构造函数,使角色对象在创建时被初始化;设计析构函数,当角色对象被撤消时,提示一句“XXX(名称)退出江湖…”。
#include<iostream>
#include<string>
using namespace std;
class Role
{
public:
Role(string nam,int n)
{
this->name=nam;
this->blood=n;
}
~Role()
{
if(!blood)
cout<<name<<"退出江湖"<<endl;
}
void show();
private:
string name;
int blood;
};
void Role::show()
{
if(blood)
cout<<name<<"还剩"<<blood<<"滴血"<<endl;
}
int main( )
{
Role mary("Mary", 4);
Role jack("Jack", 0);
mary.show();
jack.show();
return 0;
}
开始总是出现binary '<<' : no operator defined which takes a right-hand operand of type 'void' (or there is no acceptable conversion),百度搜索说是少了#include<string>,或者是程序中<<加了返回值为void类型的函数;我看原来的程序的确是这样的,加上之后还是有好多的错误,把开始的函数类型由int改成void,想到应该会,去掉原来的返回值,还是不对,参考老师的程序之后还是有问题,然后直接把老师的程序放进了VC6.0之后也是和我同样的问题出现,想着可能是编译环境的问题,就用visual 2012运行,还是不对,现在的问题比原来还要多了。最后发现是我自己的一个函数 void isAlived()函数内部写成了if(isAlived()) blood-=blood;,并没有将返回值传给life。
用string 定义一个变量还是第一次见,之前看见的string只是在头文件看见的,只是在字符串的操作当中才看见。知识只有我们想不到的,没有办不到的,我还得加油。