crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

abc
  опции профиля:
сообщение 13.3.2011, 19:48
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


Есть три класса. Второй и третий - наследники первого. Первый класс хранит строку. Второй и третий получают ссылку на объект первого класса и приделывают к строке теги. Второй класс делает текст жирным, третий - курсивным.

Первый класс:
class Paragraph
{
public:
     Paragraph(const string& inInitialText) : mText(inInitialText) {}
     virtual string getHTML() const { return mText; }

protected:
     string mText;
};


Второй класс:
class BoldParagraph : public Paragraph
{
public:
     BoldParagraph(const Paragraph& inParagraph) : Paragraph(""), mWrapped(inParagraph) {}
     virtual string getHTML() const { return "<B>" + mWrapped.getHTML() + "</B>"; }

protected:
     const Paragraph& mWrapped;
};


третий класс:
class ItalicParagraph : public Paragraph
{
public:
     ItalicParagraph(const Paragraph& inParagraph) : Paragraph(""), mWrapped(inParagraph) {}
     virtual string getHTML() const { return "<I>" + mWrapped.getHTML() + "</I>"; }

protected:
     const Paragraph& mWrapped;
};


Main:
int main(int argc, char** argv)
{
      Paragraph p("Текст");

      cout<<BoldParagraph(p).getHTML()<<endl;

      cout<<ItalicParagraph(BoldParagraph(p)).getHTML()<<endl;

      cout<<BoldParagraph(BoldParagraph(p)).getHTML()<<endl;
}


Вывод:
<B>Текст</B>

<I><B>Текст</B></I>

<B>Текст</B>


Видим, что третий вывод не содержит удвоения тегов.
"Если вы понимаете причину такого "явления", значит, вы освоили С++!" - будоражащие слова из книги)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Влад
  опции профиля:
сообщение 14.3.2011, 16:55
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 146
Регистрация: 20.3.2009
Из: Санкт-Петербург
Пользователь №: 627

Спасибо сказали: 46 раз(а)




Репутация:   8  


abc, лучше открой почтеннейшей публике, почему третий вывод не содержит удвоения тегов.....

Раскрывающийся текст
Всего лишь срабатывает копирующий конструктор.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Ответить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 24.4.2025, 21:22