本题考查考生应用C++语言进行程序设计的能力,涉及类、对象、函数的定义和相关操作。要求考生根据给出的案例和代码说明,阅读并完成程序填空。
本题中涉及比赛和球队。根据说明进行设计,题目给出了类图(图6-1类图所示)。
图中类Game和Team之间是聚合关系。Game类有两个public的函数:getResults() 和incrementGoal:分别表示获取比赛结果和某支球队进1球后增加比分;private属性就是参加比赛的两支球队。Team类中有3个public函数,分别为本球队进1球后增加得分、获得本队得分和获得球队名称;private的属性为球队名称和得分。球队名采用string类型,得分信息从上下文可知是goals,用int类型。
在Team对象创建时,初始化球队名称和得分。C++11标准之后,对象的属性定义时才可显式初始化;对象的属性name类型为string,需要在构造器中对球队名称加以显式初始化。其构造器接收球队名称,参数名称与对象的属性名均为name,用this关键字加以区分。其中this关键字用来引用当前对象或类实例,可以用->取属性或行为,即:
this->name = name;
this->goals =0;
注:没有同名时是否有this->都表示名称所表示的对象属性。
从函数getGoals()中的return goals判断,缺少属性goals来表示得分。再从上下文判断,函数increamentGoal()中,表示在比赛中某球队进1球,即goals的值增加1。
创建Game对象表示两支球队的一场比赛。构造器参数为两支球队,用以初始化 Game对象的两个属性。函数getResults()用于输出当前比分。函数incrementGoal()用于表示一支球队进1球,具体是哪支球队由参数给定,所以参数类型为Team*。
主控逻辑代码在程序主入口函数main()中实现。在main()函数中,先创建两支球队(用new关键字),即两个Team类的对象指针,球队名称分别为“TA”和“TB”,指针名称分别为t1和t2,即:
Team *t1 = new Team("TA");
Team *t2 = new Team("TB");
以这两个对象指针名称为参数,创建一场比赛对象(用new 关键字),指针名称为 football,即:
Game *football = new Game(t1,t2);
然后用:
football->incrementGoal(t1);
football->incrementGoal(t2);
表示球队TA进一球,球队TB进一球。然后调用getResults()函数输出此时的比分,即:
football->getResults ();
然后TB再进一球,再调用getResults()函数输出此时的比分,即:
football->incrementGoal(t2);
football->getResults() ;
综上所述,空(1)需要定义表示一支球队的得分goals,题目代码中已经给出用分号结尾,所以空(1)为int goals(或c++11标准之后int goals=0也支持);空(2)需要表示Team对象指针的name属性,即this->name;空(3)需要表示当前球队得分加1, 因为只有一条语句,只要表示goals加1即可,即goals++或++goals(等价表示);空(4)需要表示参数类型为球队指针,即 Team*;空(5)处为创建Game类的对象football, 需要两个Team类型对象的指针,从其后面语句可知,两个指针名称为t1和t2,即new Game(t1, t2)。