读书人

指针有关问题求解答

发布时间: 2012-06-10 14:03:15 作者: rapoo

指针问题求解答
#include<iostream>
#include<string>

using namespace std;

class Animal{
protected:
string name;
int shoutNumber;
virtual string getShoutSound()const{return " ";}
public:

Animal()
{
name="No Name";shoutNumber=3;
}

Animal(string n)
{
name=n;shoutNumber=3;
}

string shout()
{
string result=" ";
for(int i=0;i<shoutNumber;i++)
{
result+=getShoutSound()+',';
}

return "my name is:"+name+" "+result;
}

};

class Cat : public Animal{
protected:
string getShoutSound()const{return "miao";}
public:
Cat() : Animal(){}
Cat(string nn) : Animal(nn){}
};

class Dog : public Animal{
protected:
string getShoutSound()const{return "wang";}
public:
Dog() : Animal(){}
Dog(string nn) : Animal(nn){}
};

class Sheep : public Animal{
protected:
string getShoutSound()const{return "mie";}
public:
Sheep() : Animal(){}
Sheep(string nn) : Animal(nn){}
};


struct Sport{
Animal* anl;
Sport* next;
};

Sport* addOne(Sport* head,Sport *p)
{


if(head==0)
{

head=p;

}
else
{

Sport* pp=head;
while(pp->next !=0)pp=pp->next;
pp->next=p;
p->next=0;
}


return head;
}



void dismiss(Sport* head)
{
for(Sport *p=head;p!=0;p=head)
{
head=head->next;
delete p->anl;
delete p;
}
}
void main()
{
Sport* head=new Sport;
head->anl=new Cat("abc");

Sport* anp=new Sport;
cout<<"ok\n";
anp->anl=new Cat("why");
cout<<"ajkidn\n";
head=addOne(head,anp);
for(Sport *qq=head;qq!=0;qq=qq->next)
cout<<qq->anl->shout()<<endl;
}





为什么在
else
{

Sport* pp=head;
while(pp->next !=0)pp=pp->next;
pp->next=p;
p->next=0;
}


系统会报错啊????

[解决办法]
head->anl=new Cat("abc");
head->next=0;//加上这句不然无法判断while(pp->next !=0)pp=pp->next;

读书人网 >C++

热点推荐