Материал: Методические указания к практическим занятиям по дисциплине «Основы построения защищенных компьютерных сетей». Деревянко В.Н

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

1. Подготовка рабочей области проекта и вставка класса ССаr

В среде Visual C++ создаётся пустое консольное приложение Win32 с именем CarInCPP. Вставляется новый пустой файл с именем main.cpp в рабочее пространство проекта. Для использования потоков ввода/вывода C++ включается <iostream.h> перед определением головного блока main:

#include <iostream.h> void main(void)

{

}

Вставьте новый класс в программу: щелкните на пиктограмме проекта правой кнопкой мыши на вкладке ClassView и выберите команду New Class... из меню.

В появившемся диалоговом окне New Class введите имя нового класса в поле Name и нажмите кнопку ОК.

Этот диалог автоматически определяет конструктор без параметров и виртуальный деструктор для класса, а также снабжает определение класса вызовами препроцессора во избежание ошибок, связанных с переопределениями. Зададим постоянные значения для верхнего предела скорости и максимальной длины имени. Это можно сделать прямо в заголовочном файле CCаr (вне описания класса) с использованием ключевого слова C++ const вместо директивы препроцессора

#define языка С:

const int MAX_LENGTH =100; const int MAX_SP

EED = 500;

2. Определение открытого интерфейса ССаr

Позволим классу ССаr поддерживать следующий открытый интерфейс:

// Car.h

const int MAX_LENGTH = 100; const int MAX_SPEED = 500;

19

#include <iostream.h>

 

#include <stdio.h>

// Для функции gets()

#include <string.h>

// Для строк

class ССаr

 

{

 

public:

// Открытый интерфейс класса

ССаr();

virtual ~ССаr();

void DisplayCarStats() ; void SpeedUp();

// Функции доступа обычно определяются как встраиваемые (inline) int GetCurrSpeed() { return m_currSpeed;}

int GetMaxSpeed() { return m_maxSpeed;} char* GetPetName() { return m_petName;}

// Обобщенная функция типа Set void CreateACar();

private:

// Закрытые данные

 

char m_petName[MAX_LENGTH];

 

int m_maxSpeed;

 

int m_currSpeed;

};

Глобальные функции помещены в открытую часть класса. Обратите внимание на заголовки методов: нет необходимости передавать какие-либо параметры в DisplayCarStats() или Speedup(), поскольку они работают непосредственно с закрытыми данными объекта.

В этой работе используется метод CreateACar(), вызываемый пользователем объекта при создания объекта для установки всех закрытых переменных (вот почему мы не будем определять отдельные функции set для данных или перегруженные конструкторы).

20

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

Конструктор, задаваемый по умолчанию, присваивает параметрам состояния объекта пустые значения с помощью спи-

ска инициализации: // Конструктор ССаr

ССаr::ССаr() : m_currSpeed(0), m_maxSpeed(0)

{

//Вместо присвоения этим параметрам

//нулевых значений внутри блока

//используется список инициализации strcpy(m_petName, "");

}

Метод CreateACar() запрашивает имя машины и максимальную скорость, используя gets(), cout и cin:

// Создание новой машины void CCar::CreateACar()

{

char buffer [MAX_LENGTH]; int spd =0;

cout<<"Введите имя вашей машины:"<< flush;

gets(buffer); // Если желаете, проверьте соответствие с МАХ strcpy(m_petName, buffer);

do // Скорость в заданных пределах?...

{

cout << "Введите максимальную скорость вашей машины: " << flush; cm » spd;

cout << endl;

}while(spd > MAX_SPEED); m_maxSpeed = spd;

}

Поскольку эта функция оперирует с внутренними закрытыми параметрами состояния, DisplayCarStats() не требует аргументов.

// Реализация DisplayCarStats.

21

void CCar::DisplayCarStats()

{

cout << "***********************************" << endl; cout << "Имя машины: " << m_petName << endl;

cout << "Ее максимальная скорость: " << m_maxSpeed << endl; cout << "***********************************" << endl << endl;

}

SpeedUp() // увеличивает скорость и печатает результат: void CCar::Speedup()

{

if(m_currSpeed <= m_maxSpeed)

{

m_currSpeed = m_currSpeed + 10;

cout << "Скорость: " << m_currSpeed << endl;

}

}

Определены класс и реализация его методов. Переходите к компиляции.

22

4. Реализация головного блока

Теперь все, что надо делать, — это посылать сообщения в экземпляр класса CCаr:

#include "car.h" #include <iostream.h> void main(void)

{

cout << "***********************************" << endl; cout << " Программа Car на С++"<< endl;

cout << "***********************************"<< endl;

CCar myCar;

// Конструктор без параметров

myCar.CreateACar();

// Запрос на ввод данных

myCar.DisplayCarStats();

// Показ состояния

while(myCar.GetCurrSpeed() <= myCar.GetMaxSpeed())

myCar.SpeedUp();

// Разгоняемся! Взрыв!

cout << myCar.GetPetNameO << " взлетела на воздух! Ходи пешком!" << endl;

}

Контрольные вопросы

1.Что представляет собой модель автомобиля, которая рассматривалась в домашнем задании?

2.Каков порядок разработки и выполнения программ в среде Visual C++?

23

Источник: https://studfile.net/preview/16565401/