Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР_08_Классы-VC++7-2003.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
946.18 Кб
Скачать

Содержание работы

  1. Создать проект консольного приложения Lab8.

    • Запустить Microsoft Visual Studio:

  • Запустить мастер создания проекта AppWizard командой меню File | New | Project…:

  • В диалоговой панели «New Project» выделить мышью вариант приложения Win32 Console Application; перейти в окно редактирования Name и набрать имя создаваемого проекта Lab8; при помощи кнопки «Browse» справа от окна редактирования Location перейти на рабочий логический диск (например, R:); подтвердить нажатием кнопки OK выбранные опции панели New Project:

  • В открывшемся следующем окне «Win32 Application Wizard» подтвердить выбранные опции, нажав Finish:

  1. Вставить в проект новый заголовочный header-файл, выполнив команду меню «Project | Add New Item…»:

  1. В окне «Templates» выделить строку «Header File (.h)», в окне редактирования «Name» набрать имя вставляемого файла Classes. Подтвердить установки нажатием кнопки «Open»:

  1. Вновь созданный заголовочный файл Classes.h открывается в окне редактора:

  1. В редакторе необходимо набрать объявления классов CBase, CParent, CChild:

class CBase // базовый абстрактный класс CBase

{

public:

CBase(); // конструктор

virtual ~CBase(); // деструктор

virtual double Method()=0; // абстрактный метод

};

class CParent : public CBase // производный от CBase класс CParent

{

protected: // защищенные члены

double* Y; // указатель на результат

double Num; // значение числителя дроби

double Den; // значение знаменателя дроби

public:

double X; // значение аргумента дроби

virtual double Method(); // определенная виртуальная функция

public:

CParent() {}; // конструктор по умолчанию

CParent(double Value); // перегруженный конструктор

virtual ~CParent(); // деструктор

};

class CChild : public CParent // производный от CParent класс CChild

{

public:

CChild(){}; // конструктор по умолчанию

CChild(double Value); // перегруженный конструктор

virtual ~CChild(); // деструктор

virtual double Method(); // переопределенная (overriding) функция

double Method(double x); // перегруженная (overloading) функция

};

  1. Вставить в проект новый файл исходного текста, выполнив команду меню «Project | Add New Item», где в окне «Templates» выделить строку «C++ File», в окне редактирования «Name» набрать имя вставляемого файла Classes. Подтвердить установки нажатием кнопки «Open»:

  1. Вновь созданный исходный файл Classes.cpp открывается в окне редактора:

  1. В окне редактора надо набрать текст реализации функций классов, объявленных в файле Classes.h (не забудьте подключить заголовочные файлы “stdafx.h” и “Classes.h”):

#include "stdafx.h"

#include "Classes.h"

// class CBase implementation

CBase::CBase()

{

cout << " CBase Constructor" << endl;

}

CBase::~CBase()

{

cout << " CBase Destructor" << endl;

}

// class CParent implementation

CParent::CParent(double Value)

{

cout << " CParent Constructor" << endl;

X=Value;

Y=new double(0);

}

CParent::~CParent()

{

cout << " CParent Destructor" << endl;

delete Y;

}

double CParent::Method()

{

Num=Pi/exp(X)-4.5*pow(10.0,2.5)*sqrt(X);

Den=tan(2.7e-3)-log(X);

*Y=Num/Den;

return *Y;

}

// class CChild implementation

CChild::CChild(double Value):CParent(Value)

{

cout << " CChild Constructor" << endl;

}

CChild::~CChild()

{

cout << " CChild Destructor" << endl;

}

double CChild::Method()

{

double YParent=CParent::Method();

*Y=YParent*2;

return *Y;

}

double CChild::Method(double x)

{

Num=Pi/exp(x)-4.5*pow(10.0,2.5)*sqrt(x);

return Num;

}

  1. Существующий файл Lab8.cpp содержит пустую заготовку главной функции:

  1. В файл Lab8.cpp внутрь заготовки главной функции main() консольного приложения набрать текст, создающий объекты классов и вызывающий их методы и свойства:

// Lab8.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include "Classes.h"

int _tmain(int argc, _TCHAR* argv[])

{

double x;

cout << "Enter x =";

cin >> x;

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

CParent ParentObject(x);

cout << " Argument = " << ParentObject.X << endl;

cout << " Virtual Method() returns Y = " << ParentObject.Method() << endl;

cout << " **************************" << "\n\n";

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

CChild* pChildObject=new CChild(x);

cout << " Argument = " << pChildObject->X << endl;

cout << " Overriding Method() returns Y = " << pChildObject->Method() << endl;

cout << " Overloading Method() returns Num = " << pChildObject->Method(x) << endl;

cout << " **************************" << "\n\n";

delete pChildObject;

return 0;

}

  1. В заголовочный файл StdAfx.h после строки комментария // TODO: вставить необходимые для корректной работы со стандартными библиотеками заголовочные файлы

#include <math.h> // стандартная поддержка математических вычислений

#define Pi 3.1416 // число Pi

using namespace std; // стандарное пространство имен

  1. Выполнить построение проекта командой меню «Build | Build Lab8»:

  1. При отсутствии ошибок окно «Output» содержит такую информацию:

  1. Запустить на выполнение без отладки созданное консольное приложение командой меню «Debug | Start Without Debugging»:

  1. На экране возникнет окно консольного приложения с предложением ввести исходное значение X:

  1. Введите исходные данные и нажмите клавишу «Enter». Проанализировать результаты расчета, проследив по сообщениям на экране цепочку вызовов конструкторов, деструкторов, переопределенных и перегруженных методов объектов классов.

  1. Вернуться в среду редактирования нажатием любой клавиши.

  2. Завершить работу интегрированной среды Microsoft Visual C++, выполнив команду меню «File | Exit»:

  1. Оформить отчет о проделанной лабораторной работе.