关于构造函数形参问题

来源:互联网 发布:工行贵金属看盘软件 编辑:程序博客网 时间:2024/05/17 03:50
#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;}elsecout<<": hasn't a table."<<endl;player2.Name();if(player2.HasTable()){cout<<": has a table."<<endl;}elsecout<<": 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构造函数。

0 0
原创粉丝点击