#include <iostream>
#include <string>
using namespace std;
class String //базовый класс
{
protected:
enum {SZ = 80 }; //размер всех объектов String
char str [SZ]; //содержит С-строку
public:
String() //конструктор без аргументов
{str [0] ='\0';}
String(char s []) //конструктор c одинм аргументом
{strcpy(str,s);} //преобразование в String
void display()const //вывести String
{cout << str;}
operator char*() //функция преобразования
{return str;} //преобразовать String в C-string
};
class Pstring :public String //порожденный класс
{
public:
Pstring(char s[]);
};
Pstring::Pstring(char s [] ) //конструктор для Pstring
{
if(strlen(s)>SZ-1) //если слишком длинная строка.
{
int j = 0;
for(j = 0 ;j<SZ-1;j++) //копировать первые SZ-1
str [j] = s [j]; //символы «вручную»
str [j] = '\0'; //добавить служебный символ
}
else //если не слишком длинная.
String(s); //создать нормальную строку
}
int main()
{
setlocale(0,"");
Pstring s1 ="Это очень-очень длинная строка, которая, возможно,да, нет. точно, - превысит размер, ограниченный SZ.";
cout <<"\nsl=";
cout << static_cast<char*>(s1) << endl;
Pstring s2 ="А это коротенькая строка.";
cout <<"\ns2=";
s2.display();// пробывал так cout << static_cast<char*>(s2);
//,но картина не изменилась
cout << endl;
getchar();
return 0;
}