[ create a new paste ] login | about

Link: http://codepad.org/NI4cyXVO    [ raw code | fork ]

C++, pasted on Aug 1:
//ex9_2.cpp 
//наследование класса String 
#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()
{
	char* str = new char[255];
	cout << "Введите строку: ";
	cin.getline(str,255);
	Pstring s1(str);
	//Pstring s1 ="Это очень-очень длинная строка, которая, возможно,да, нет. точно, - превысит размер, ограниченный SZ."; 
	cout <<"\nsl=";
	cout << static_cast<char*>(s1) << endl;
	cout << "Введите строку: ";
	cin.getline(str,255);
	Pstring s2 = str;
	//Pstring s2 ="А это коротенькая строка.";
	cout <<"\ns2=";
	s2.display();// пробывал так cout << static_cast<char*>(s2);
	//,но картина не изменилась
	cout << endl;
	getchar();
	return 0;
} 


Create a new paste based on this one


Comments: