
Содержание работы
Создать проект консольного приложения 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:
Вставить в проект новый заголовочный header-файл, выполнив команду меню «Project | Add New Item…»:
В окне «Templates» выделить строку «Header File (.h)», в окне редактирования «Name» набрать имя вставляемого файла Classes. Подтвердить установки нажатием кнопки «Open»:
Вновь созданный заголовочный файл Classes.h открывается в окне редактора:
В редакторе необходимо набрать объявления классов 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) функция
};
Вставить в проект новый файл исходного текста, выполнив команду меню «Project | Add New Item…», где в окне «Templates» выделить строку «C++ File», в окне редактирования «Name» набрать имя вставляемого файла Classes. Подтвердить установки нажатием кнопки «Open»:
Вновь созданный исходный файл Classes.cpp открывается в окне редактора:
В окне редактора надо набрать текст реализации функций классов, объявленных в файле 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;
}
Существующий файл Lab8.cpp содержит пустую заготовку главной функции:
В файл 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;
}
В заголовочный файл StdAfx.h после строки комментария // TODO: вставить необходимые для корректной работы со стандартными библиотеками заголовочные файлы
#include <math.h> // стандартная поддержка математических вычислений
#define Pi 3.1416 // число Pi
using namespace std; // стандарное пространство имен
Выполнить построение проекта командой меню «Build | Build Lab8»:
При отсутствии ошибок окно «Output» содержит такую информацию:
Запустить на выполнение без отладки созданное консольное приложение командой меню «Debug | Start Without Debugging»:
На экране возникнет окно консольного приложения с предложением ввести исходное значение X:
Введите исходные данные и нажмите клавишу «Enter». Проанализировать результаты расчета, проследив по сообщениям на экране цепочку вызовов конструкторов, деструкторов, переопределенных и перегруженных методов объектов классов.
Вернуться в среду редактирования нажатием любой клавиши.
Завершить работу интегрированной среды Microsoft Visual C++, выполнив команду меню «File | Exit»:
Оформить отчет о проделанной лабораторной работе.