#ifndef TABTENN0_H_
#define TABTENN0_H_
#include<string>
using std::string;
class TableTennisPlayer
{
private:
string firstname;
string lastname;
bool hasTable;
public:
TableTennisPlayer(const string &fn="none",const string &ln="none",bool ht=false);
void Name()const;
bool HasTable()const{return hasTable;};
void ResetTable(bool v){hasTable=v;};
};
#endif
#include<iostream>
#include"tabtenn0.h"
TableTennisPlayer::TableTennisPlayer(const string &fn,const string &ln,bool ht)
{
firstname=fn;
lastname=ln;
hasTable=ht;
}
void TableTennisPlayer::Name()const
{
std::cout<<lastname<<","<<firstname;
}
#include<iostream>
#include"tabtenn0.h"
int main()
{
using namespace std;
TableTennisPlayer player1("Chuck","Blizzard",true);
TableTennisPlayer player2("Tara","Boomdea",false);
player1.Name();
if(player1.HasTable())
{
cout<<": has a table."<<endl;
}
else
cout<<": hasn't a table."<<endl;
player2.Name();
if(player2.HasTable())
{
cout<<": has a table."<<endl;
}
else
cout<<": hasn't a table."<<endl;
cin.get();
return 0;
}
注意但该程序实例化对象使用的是C风格字符串作为参数:
<span style="white-space:pre"> </span>TableTennisPlayer player1("Chuck","Blizzard",true);
TableTennisPlayer player2("Tara","Boomdea",false);
但构造函数的形参类型被声明为const string &.这导致类型不匹配,但与第12章创建的String累一样,string类有一个将const char *作为参数的构造函数,使用C风格字符串初始化string对象时,将自动调用这个构造函数。总之,可将string对象或C风格字符串作为构造函数TableTennisPlayer的参数;将前者作为参数时,将调用接受const string &作为参数的string构造函数,而将后者作为参数时,将调用接受const char *作为参数的string构造函数。