Даны: 1)объект символ, умеющий печатать свое значение и отвечать на запрос о значении своего символьного поля.
2)Объект «строка», как массив из 15 объектов-символов, умеющий выводить на печать значение своих элементов, удалять символ по номеру, удалять символ по значению, возвра-щать номер символа, начиная с которого некоторая подстрока или символ входят в строку.
реализация классов:
#include <iostream.h>
#include <string.h>
class TSymbol
{ private:
char Ref;
public:
TSymbol(char ref);
// ~TSlovo(void) { delete Ref;}
char GetCh(void);
void Print(void);
};
char TSymbol::GetCh(void)
{ return Ref;}
TSymbol::TSymbol(char ref)
{ Ref=ref;}
void TSymbol::Print(void)
{ cout<<Ref;}
class TString
{ private:
TSymbol ** smb;
public:
void TString::Print(void)
{
for (int i=0;i<15;i++)
smb[i]->Print();
}
TString::TString(char ref[15])
{
smb=new (TSymbol *);
for (int i=0;i<15;i++)
smb[i]=new TSymbol(ref[i]);
}
};
В этой задаче по условию надо создать объект строка с массивом из объектов другого класса (символ)
Как я понимаю при этом класс TString при создании (в конструкторе) должен иметь внутри себя массив объектов TSymbol .
Поэтому конструктор класса TString одновременно пытается создать 15 объектов класса TSymbol. У меня это проходит
без ошибки только при коде
smb=new (TSymbol *);
for (int i=0;i<15;i++)
smb[i]=new TSymbol(ref[i]);
(было искушение 1 оператор заменить на smb=new (TSymbol **)[15] но это на следующем операторе
валит программу )
вариант выше проходит. Но при вызове печати str.Print() в демо-проге вместо 1-х 3 символов идет мусор, остальные печатаются. В чем дело?