Title

2018Final静态成员(黑名单)

6-4 2018Final静态成员(黑名单) (20 分)

怡山小学生物组是公认的熊孩子天堂,他们每天都在做各种尝试,如: 强迫蚕宝宝吃各种不同的菜叶,把小狗和小白鼠关进一个笼子里,重复输入流浪狗记录等等。忍无可忍的黄老师决定往成员信息里添加一项黑名单,限制黑名单中同学的单独活动,以保证生物组的日常管理秩序。

黑名单的增加来自两个时刻,一个是在增加新成员时,根据班主任的建议,直接将同学拉入黑名单,另一个是根据同学在组内的行为,由黄老师将其拉入。

黑名单的减小也有两个时刻,一个是黄老师将某位同学拉出,还有一个是黑名单已经满了,且需要拉入新的人员,此时,在黑名单中时间最长的成员,自动地被拉出黑名单。

输入:

输入时,先输入当前任务类型:

任务类型为1时,将加入新的学生记录;此时将输入学生的学号(假定新加入的学生肯定没有加入过),如果该学生应加入黑名单,则接着会多输入一个"999";

任务类型为2时,将某已有学生加入黑名单;此时将直接输入学生学号(假定不会将黑名单中已有的学生,再次加入黑名单);

任务类型为3时,将某些学生移出黑名单;此时将直接输入学生学号(假定这个学号肯定在黑名单中)。

任务类型为0时,结束输入。

输出:

在执行类型2和3任务时,将输出当前的黑名单中的学生学号,用空格间隔,输出顺序为学生被加入黑名单的顺序,先加入者在前。如果黑名单为空,输出"NULL BLACKLIST!".

函数接口定义:

请补全类Group

裁判测试程序样例:

#include <iostream> 
using namespace std;
const int N=3;
class Group{
    private:
        int num;
        static int blackList[N];
        static int size;
    public:
        Group();
        Group(int num, bool bSign);
        static void addToList(int num);
        static void removeFromList(int num);
        static void displayList();
};
void Group::displayList(){
    if(size==0) cout<<"NULL BLACKLIST!"<<endl;
        else{
            for(int i=0;i<size-1;i++) cout<<blackList[i]<<' ';
            cout<<blackList[size-1]<<endl;
        }
}
/* 请在这里填写答案 */

int main(){
    int i, j, k, num, task, count=0;
    Group g[100];
    cin>>task;
    while(task!=0){
        switch(task){
            case 1: cin>>num>>k; 
                      if(k==999) {
                          g[count++]=Group(num, true);
                          cin>>task;
                      }else{
                             g[count++]=Group(num, false);
                             task = k;
                         }
                    break;
            case 2: cin>>num;
                      Group::addToList(num);
                      Group::displayList();
                      cin>>task;
                      break;
            case 3: cin>>num;
                      Group::removeFromList(num);
                      Group::displayList();
                      cin>>task;
                      break;
        }
    }
    return 0;
}

输入样例:

1 102
1 345 999
1 123
2 102
1 333
2 333
2 123
3 102
3 123
3 333
0

输出样例:

345 102
345 102 333
102 333 123
333 123
333
NULL BLACKLIST!

代码

int Group::size=0;
int Group::blackList[N]={0};

Group::Group(){
	
}
Group::Group(int num,bool bSign)
{
    this->num=num;
    if(bSign==true)
        Group::addToList(num);
}

void Group::addToList(int num)
{
	//黑名单已满,移除最年长成员
	if(size==N) 
	{
	    removeFromList(blackList[0]);
	}
	blackList[size++]=num;
} 

	

void Group::removeFromList(int num)
{
	int pos=0;
	for(pos=0;pos<size;pos++)
	{
		if(blackList[pos]==num)
		  break;
	}
	for(int i=pos;i<size-1;i++)
	{
		blackList[i]=blackList[i+1];
	}
	size--;
}

学习和反思

  • class 类名{
        private:
           非静态变量区
           
           静态变量区
           静态变量写法 static 数据类型 名字 
        
        public:
           1.各种构造函数或者各种构造函数的声明
           2.函数本身或者函数的声明
             a。静态成员函数
    }
    
    类外定义构造函数
    
    类外初始化静态变量    //不写的话,会报出Id returned 1 exit status的错误
    若有数组的初始化,则构造函数需要最朴素简单的版本,数据类型  类名:数组={0};
    
    各种函数的继续加工
    
  • this 指针不能用于静态变量,静态变量相当于是类里面的全局变量,相当于是这个类里面特殊的通行证(类里面专属的通行货币)。而this是特指当前对象的,这种特定的性质和普遍的性质是起矛盾的,故而this不能用于静态变量。
posted @ 2021-05-22 22:02  BeautifulWater  阅读(182)  评论(0编辑  收藏  举报