这个只要注意好它们之间的声明顺序就可以了
#include <iostream>
using namespace std;
class Tv;//往前声明
class Remote
{
private:
Tv *p;
public:
Remote(Tv *p);
void turnState();
void upVol();
void downVol();
void upChan();
void downChan();
void showState();
void setChannal(int channal);
};
class Tv
{
friend void Remote::setChannal(int channal);
enum{OFF,ON};
enum{minchan,maxchan=25};
enum{minvol,maxvol=25};
private:
int state;
int channal;
int volume;
public:
Tv()
{
state = OFF;
channal = minchan;
volume = minvol;
}
void turnState()
{
state = (state==OFF?ON:OFF);
return;
}
void upVol()
{
if(volume == maxvol)
{
cout<<"已经到最大音量了"<<endl;
return;
}
volume++;
return;
}
void downVol()
{
if(volume == minvol)
{
cout<<"已经到最小音量了"<<endl;
return;
}
volume--;
return;
}
void upChan()
{
if(channal == maxchan)
{
cout<<"已经到最大频道了"<<endl;
return;
}
channal++;
return;
}
void downChan()
{
if(channal == minchan)
{
cout<<"已经到最小频道了"<<endl;
return;
}
channal--;
return;
}
void showState()
{
if(state)
{
cout<<"当前电视机的音量是:"<<volume<<endl;
cout<<"当前电视机的频道是:"<<channal<<endl;
}
else
{
cout<<"请打开电视机"<<endl;
}
return;
}
};
int main(int argc, char *argv[])
{
Tv ob1;
Remote con1(&ob1);
con1.turnState();
con1.setChannal(23);
con1.upVol();
con1.upVol();
con1.showState();
return 0;
}
Remote::Remote(Tv *p)
{
this ->p =p;
}
void Remote::turnState()
{
p->turnState();
}
void Remote::upVol()
{
p->upVol();
}
void Remote::downVol()
{
p->downVol();
}
void Remote::upChan()
{
p->upChan();
}
void Remote::downChan()
{
p->downChan();
}
void Remote::showState()
{
p->showState();
}
void Remote::setChannal(int channal)
{
p->channal = channal;
return;
}