Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга C++.doc
Скачиваний:
24
Добавлен:
10.11.2019
Размер:
2.48 Mб
Скачать

Практический пример

Итак, практический пример использования виртуальных функций. Весь проект состоит из трех частей: описание протокола класса, реализация класса, использование класса. Начнем...

Заголовочный файл (протокол описания класса)

// Предотвращение повторной компиляции кода

// с помощью директив условной компиляции

#if !defined VIRT_H

#define VIRT_H

class Head

{

char c;

public:

Head();

Head(char);

virtual void Print();

};

class Body : public Head

{

char *str;

int len;

public:

Body();

Body(char*);

Body(const Body&);

Body& operator = (const Body&);

void Print();

};

#endif

Реализация методов класса.

#include <iostream.h>

#include <string.h>

#include "virt.h"

Head::Head()

{

c = '-';

}

Head::Head(char ch)

{

c = ch;

}

void Head::Print()

{

cout << endl;

for(int i = 0; i < 80; i++)

cout << c;

cout << endl;

}

Body::Body() : Head('-')

{

len = strlen("Hello, World !!!");

str = new char[len + 1];

strcpy(str, "Hello, World !!!");

}

Body::Body(char *s) : Head('-')

{

len = strlen(s);

str = new char[len + 1];

strcpy(str, s);

}

Body::Body(const Body &s) : Head('-')

{

len = s.len;

str = new char[len + 1];

strcpy(str, s.str);

}

Body& Body::operator = (const Body &s)

{

delete [] str;

len = s.len;

str = new char[len + 1];

strcpy(str, s.str);

return *this;

}

void Body::Print()

{

for(int i = 0; i < (80 - len) / 2; i++)

cout << ' ';

cout << str;

}

И, непосредственно, наша любимая функция main().

#include "virt.h"

void main()

{

const n = 7;

Head *p[7];

p[0] = new Head;

p[1] = new Body;

p[2] = new Head('*');

p[3] = new Body("This using of the virtual functions");

p[4] = new Head('+');

p[5] = new Body("Enjoy !");

p[6] = new Head;

for(int i = 0; i < n; i++)

p[i]->Print();

for(i = 0; i < n; i++)

delete [] p[i];

}

Домашнее задание

  1. В примере раздела "Виртуальные функции", используется базовый класс vehicle. Перепишите программу таким образом, чтобы класс vehicle был абстрактным.

  2. Создать абсрактный базовый класс Point с чисто виртуальной функцией Draw(). Создайте три производных класса: Line, Triangle, Rectangle. Переопределите функцию Draw() для рисования соответствующих фигур.

Ввод-вывод в языке С++.

Средства ввода/вывода не входят непосредственно в язык С++, поэтому бибилиотека ввода/вывода становится одной из самых незаменимых при программировании на С++.

На протяжении многих уроков, используя директиву препроцессора include мы подключали к нашим программам заголовочный файл iostream.h. Его назначение - связать компилируемую программу с одной из основных частей бибилотеки ввода/вывода, построенной на основе механизма классов.

Потоки ввода-вывода.

Описанные в файле iostream.h средства ввода-вывода обеспечивают программиста механизмами для извлечения данных из потоков и для включения (помещения) данных в потоки.