if(a=='o')
(*(p+i)).on();
if(a=='f')
(*(p+i)).off();
上面的语句可以会引发错误,应该改成:
if (i < cm)
{
if(a=='o')
(*(p+i)).on();
if(a=='f')
(*(p+i)).off();
}
静态的变量属于类,由所有从该类诞生的对象共享,这个程序中先生成5个对象,n最后的值为5,所以调用display时显示的结果为5。
我觉得这个程序有点问题
lamp没有自己的编号, 我增加了变量m作为编号,getm获取m的值,你查询指定lamp的地方也不对.应该getm,不是getn
#include
#include
class lamp
{
private:
static int n;
bool mark;
int m;
public:
lamp();
void display();
void on();
void off();
int getn();
int getm();
};
lamp::lamp()
{
// n=m+1;
m = n;
n++;
mark=false;
}
void lamp::display()
{
cout<<"number="<
cout<<","<
cout<<","<
void lamp::on()
{
mark=true;
}
void lamp::off()
{
mark=false;
}
int lamp::getn()
{
return n;
}
int lamp::getm()
{
return m;
}
class classroom
{
private:
int roomnumber;
lamp *p;
int cm;
public:
classroom();
classroom(int,int);//房?名,??
~classroom();
void display();
void control();
};
classroom::classroom(int n,int m)
{
roomnumber=n;
p=new lamp[m];
cm=m;
}
void classroom::display()
{
cout<<"classroom number:"<
for(int i=0;i
}
classroom::~classroom()
{
delete []p;
}
void classroom::control()
{
cout<<"lamp number:";
int b;
cin>>b;
cout<<"on:o,off:f:";
char a;
cin>>a;
int i;
for(i=0;i
if((*(p+i)).getm()==b)
break;
}
if(i < cm)
{
if(a=='o')
{
(*(p+i-1)).on();
}
if(a=='f')
{
(*(p+i-1)).off();
}
}
}
int lamp::n=0;
int main(int argc, char* argv[])
{
classroom c1(3301,5);
c1.display();
c1.control();
c1.display();
return 0;
}