Абстрактный класс.
Добавлено: 07 ноя 2010, 22:59
Есть базовый абстракт. класс base. От него 2 производных first and second.
Проблемы:
1) Почему не могу вызвать метод WeightSort() вот так: p->WeightSort(); (см. main(){ ...} .)
2) Нужно: Реализовать методы вывода на экран информации, содержащейся в производных классах по указателю на базовый класс. ( Я так понимаю это я и сделал (см. main(){...}. ) Все указатели, используемые в программе должны быть реализованы в виде "умных" указателей( для "умных" указателей использовать шаблонный класс.
( Как вообще подойти к этому устовию? Нужно какой-то отдельный класс? но что в нем должно быть?)
Проблемы:
1) Почему не могу вызвать метод WeightSort() вот так: p->WeightSort(); (см. main(){ ...} .)
2) Нужно: Реализовать методы вывода на экран информации, содержащейся в производных классах по указателю на базовый класс. ( Я так понимаю это я и сделал (см. main(){...}. ) Все указатели, используемые в программе должны быть реализованы в виде "умных" указателей( для "умных" указателей использовать шаблонный класс.
( Как вообще подойти к этому устовию? Нужно какой-то отдельный класс? но что в нем должно быть?)
Код: Выделить всё
class base
{
public:
int n;
base(){n=0;}
virtual ~base(){}
virtual void AddDate()=0;
virtual void print()=0;
virtual void WeightSort();
};
class first :p ublic base
{
public:
first(){naznachenie=NULL; weight=NULL;}
virtual ~first();
void AddDate();
void print()
{
for(int i=0;i<n;i++)
cout<<"naznachenie: "<<naznachenie[i]<<"; weight: "<<weight[i]<<endl;
}
void WeightSort();
private:
char **naznachenie;
int *weight;
};
class second :p ublic base
{
public:
second(){adress=NULL;}
virtual ~second();
void AddDate();
void print(){
for(int i=0;i<n;i++)
cout<<"name: "<<name[i]<<"; adress:"<<adress[i]<<endl;}
private:
char **name;
char **adress;
};
...
...
.... // реализация методов AddDate() для обоих произв. классов
void first::WeightSort()
{
int b;
for(int j=1;j<n;j++)
for(int i=0;i<n-j;i++)
if(weight[i]>weight[i+1])
{
b=weight[i];
weight[i]=weight[i+1];
weight[i+1]=b;
}
for(int i=0;i<n;i++)
{
if(weight[i]<1000) cout<<"(<50)__it`s a letter!"<<endl;
else cout<<"__it`s a banderol or send"<<endl;
}
system("pause");
}
...
...
... // реализация деструкторов
void main()
{
base *p;
first fst;
second snd;
p=&fst;
p->AddDate();
p->WeightSort(); [B]Error![/B]
p->print();
p = &snd;
p->AddDate();
p->print();
system("PAUSE");
}