Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: задача на знание с++
Форум на CrossPlatform.RU > Курилка > Алгоритмы, задачи по программированию, логические игры
abc
Есть три класса. Второй и третий - наследники первого. Первый класс хранит строку. Второй и третий получают ссылку на объект первого класса и приделывают к строке теги. Второй класс делает текст жирным, третий - курсивным.

Первый класс:
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>


Видим, что третий вывод не содержит удвоения тегов.
"Если вы понимаете причину такого "явления", значит, вы освоили С++!" - будоражащие слова из книги)
kwisp
:) ну задача как задача.
Цитата(abc @ 13.3.2011, 19:48) *
"Если вы понимаете причину такого "явления", значит, вы освоили С++!"

по-моему авторы книги всё же преувеличивают.
Iron Bug
знание С++ - это ощущение какое-то периодическое.
сначала новичок прочитает такую книжку и уверен, что он "изучил С++". потом вдруг оказывается, что кроме самого С с плюсами есть куча библиотек. он радостно осваивает одну-две и думает, что изучил С++. потом выясняется, что есть многопоточное программирование и начинается возня с пониманием этого аспекта. потом выясняется, что он всё время работал на одной машине и далее, с тестированием на разных машинах, начинается всё сначала. потом обнаруживается, что есть разные компиляторы. когда и этот этап пройден, появляется выход на другие системы :) когда системы освоены - появляются распределённые мультипроцессорные вычисления... в общем, конца и края изучению пока не видно :)
Влад
abc, лучше открой почтеннейшей публике, почему третий вывод не содержит удвоения тегов.....

Раскрывающийся текст
Всего лишь срабатывает копирующий конструктор.
abc
Цитата(kwisp @ 14.3.2011, 8:51) *
по-моему авторы книги всё же преувеличивают.

решили подбодрить измученного читателя)

Цитата(Iron Bug @ 14.3.2011, 10:52) *
знание С++ - это ощущение какое-то периодическое.

точно)

Цитата(Влад @ 14.3.2011, 16:55) *
abc, лучше открой почтеннейшей публике, почему третий вывод не содержит удвоения тегов.....

почтенная публика может прочесть твой ответ)
Алексей1153
Iron Bug, жжошь :D Ты за мной подглядывала!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2018 IPS, Inc.