输出问题

2025-12-14 03:19:30
推荐回答(2个)
回答1:

我觉得应该是cout遇到endl或者一个语句时或者其他情况才把缓冲区中的内容输出来。因此在上面的输出中cout<getName(); 它先访问m1.getEmployee(i),输出这是第1个职员!,然后把getName()获得的“张三”放到缓冲区中,这个语句结束了,就输出了“张三”。然后执行cout<<":"<getSalary()<因此第一次的输出为
这是第1个职员!
张三这是第1个职员!
5000

而第二次是整个句子cout<getName()<<":"<getSalary()<所以要先后进入m1.getEmployee(i)->getName()和m1.getEmployee(i)->getSalary(),然后进入getName()时输出一次这是第1个职员!,并把获得的“张三”放到缓冲区内,然后再getSalary(),同理输出一次这是第1个职员!,并把:5000放到缓冲区中。遇到endl;就输出并清空缓冲区。所以整个输出为

这是第1个职员!
这是第1个职员!
张三:5000

回答2:

我帮你把程序加了2行代码西就OK了`你看看
#include
using namespace std;
class Employee
{
char *name;
int salary;
public:
Employee(char *p=NULL,int money=0)
{
name=p;salary=money;
}
char *getName()
{
return name;
}
int getSalary()
{
return salary;
}
};
const Max=100;
class Manager:public Employee
{
Employee *group[Max];
int numOfEmployee;
public:
Manager(char *p,int money):Employee(p,money)
{
numOfEmployee=0;
}
Employee * addEmployee(Employee *person)
{
if(numOfEmployee>=Max){cout<<"已经达到经理管辖上限!不可添加\n";return NULL;}
group[numOfEmployee++]=person;
return person;
}
Employee *removeEmployee(Employee *person)
{
for(int i=0;i if(person->getName()==group[i]->getName())break;
if(i {
for(int j=i+1;j {
group[j-1]=group[j];
}
numOfEmployee--;
return person;
}
else
return NULL;
}
Employee *getEmployee(int i)
{
static bool bTrue = true;
if(bTrue)
{
cout<<"这是第"< bTrue = false;
}
else
{
bTrue = true;
}

return group[i];
}
int num()
{
cout<<"此经理管理"< return numOfEmployee;
}
};
int main()
{
Employee e1("张三",5000);
cout< Employee e2("李四",6000);
cout< Employee e3("王五",7000);
cout< Manager m1("赵六",20000);
cout< m1.addEmployee(&e1);
m1.addEmployee(&e2);
m1.addEmployee(&e3);
int j=m1.num();
cout<<"ok\n";
for(int i=0;i {cout<getName();
cout<<":"<getSalary()< }
m1.removeEmployee(&e2);
j=m1.num();
for(i=0;i cout<getName()<<":"<getSalary()< return 0;
}