Здравствуйте, Maverick!
В этой программе создадим два класса: Класс линейных функций(LineFunc) и класс степенных функций(PowerFunc).
LineFunc
Заголовочный файл
[code lang=php h=100]#pragma once
#include <iostream>
#include <string>
#include <sstream>
#include <math.h>
using namespace std;
//Класс линейной функции
class LineFunc
{
public:
LineFunc(double b = 0,double c = 0);
~LineFunc(void);
// Получение значения производной в точке
double Dericate(double inX);
// Вывод в текстовом виде формулы первой производной
string DericateFormula(void);
// Копия объекта
LineFunc* Clone(void);
//Прегруженный оператор вывода
friend ostream& operator<<(ostream& cout_, LineFunc& lineFunc)
{
cout_ << lineFunc.DericateFormula ()<< endl;
return cout_;
}
private:
// Коэффициент В
double B;
// коэффициент С
double С;
};[/code]
Ресурсный файл
[code lang=php h=200]#include "StdAfx.h"
#include "LineFunc.h"
LineFunc::LineFunc(double b,double c)
: B(b)
, С(c)
{
}
LineFunc::~LineFunc(void)
{
}
// Получение значения производной в точке
double LineFunc::Dericate(double inX)
{
return B*pow(inX,0);
}
// Вывод в текстовом виде формулы первой производной
string LineFunc::DericateFormula(void)
{
ostringstream ost;
ost << B <<"*x^0";
string buf( ost.str() );
return buf;
}
// Копия объекта
LineFunc* LineFunc::Clone(void)
{
return new LineFunc(*this);
}
[/code]
PowerFunc
Заголовочный файл
[code lang=php h=100]#pragma once
#include <iostream>
#include <string>
#include <sstream>
#include <math.h>
using namespace std;
//Класс степенной функции
class PowerFunc
{
public:
PowerFunc(double a = 0,double c=0);
~PowerFunc(void);
// Получение значения производной в этой точке
double Dericate(double inX);
// Вывод формулы производной в текстовом виде
string DerivateFormula(void);
// Копирование обекта
PowerFunc* Clone(void);
//Прегруженный оператор вывода
friend ostream& operator<<(ostream& cout_, PowerFunc& powerFunc)
{
cout_ << powerFunc.DerivateFormula ()<< endl;
return cout_;
}
private:
// Коэффициент А
double A;
// Коэффициент С
double C;
};
[/code]
ресурсный файл
[code lang=php h=200]
#include "StdAfx.h"
#include "PowerFunc.h"
PowerFunc::PowerFunc(double a,double c)
: A(a)
, C(c)
{
}
PowerFunc::~PowerFunc(void)
{
}
// Получение значения производной в этой точке
double PowerFunc::Dericate(double inX)
{
return A/pow(inX,2);
}
// Вывод формулы производной в текстовом виде
string PowerFunc::DerivateFormula(void)
{
ostringstream ost;
ost << A <<"/(x^2)";
string buf( ost.str() );
return buf;
}
// Копирование обекта
PowerFunc* PowerFunc::Clone(void)
{
return new PowerFunc(*this);
}
[/code]
Объекты этих двух классов используются в классе составной функции(SostFunc).
SostFunc
Заголовочный файл
[code lang=php h=100]
#pragma once
#include "LineFunc.h"
#include "PowerFunc.h"
//Класс составной функции
class SostFunc
{
public:
SostFunc(double a = 0,double b = 0,double c=0);
~SostFunc(void);
private:
// Указатель на линейную функцию
LineFunc lineFunc;
// указатель на степенную функцию
PowerFunc powerFunc;
//коэффициент А
double A;
// Коэффициент В
double B;
public:
// Вычисление производной в точке
double Dericate(double inX);
// Вывод формулы в текстовом виде
string DericateFormula(void);
// Копия объекта
SostFunc* Clone(void);
//Прегруженный оператор вывода
friend ostream& operator<<(ostream& cout_, SostFunc& sostFunc)
{
cout_ << sostFunc.DericateFormula ()<< endl;
return cout_;
}
private:
// коэффициент С
double C;
};
[/code]
Ресурсный файл
[code lang=php h=200]
#include "StdAfx.h"
#include "SostFunc.h"
SostFunc::SostFunc(double a,double b,double c)
: A(a)
, B(b)
, C(c)
{
LineFunc _lineFunc(B,C);
lineFunc = _lineFunc;
PowerFunc _powerFunc(A,C);
powerFunc = _powerFunc;
}
SostFunc::~SostFunc(void)
{
}
// Вычисление производной в точке
double SostFunc::Dericate(double inX)
{
return lineFunc.Dericate(inX)+powerFunc.Dericate(inX);
}
// Вывод формулы в текстовом виде
string SostFunc::DericateFormula(void)
{
return lineFunc.DericateFormula()+"+"+powerFunc.DerivateFormula()+"\n";
}
// Копия объекта
SostFunc* SostFunc::Clone(void)
{
return new SostFunc(*this);
}
[/code]
В свою очередь объект составной функции используем в классе "вектора"(Myvector).
Каждый элементом Myvector является объект класса SostFunc
Myvector
Заголовочный файл
[code lang=php h=100]#pragma once
#include "SostFunc.h"
#include <vector>
using namespace std;
//Класс вектора
class Myvector
{
private:
//Используем vector для хранения данных составной функции
vector<SostFunc> inVector;
public:
Myvector(double a=0,double b=0,double c=0);
~Myvector(void);
// Перегрузка оператора []
SostFunc& operator[](int number);
//Прегруженный оператор вывода
friend ostream& operator<<(ostream& cout_, Myvector& Myvector)
{
cout_ << Myvector.DericateFormula ()<< endl;
return cout_;
}
// Добавление элемента вектора
void Add(double a, double b, double c);
private:
// Строка для вывода
string DericateFormula(void);
};
[/code]
Ресурсный файл
[code lang=php h=200]
#include "StdAfx.h"
#include "Myvector.h"
Myvector::Myvector(double a,double b,double c)
{
Add(a,b,c);
}
Myvector::~Myvector(void)
{
}
// Перегрузка оператора []
SostFunc& Myvector::operator[](int number)
{
return inVector.at(number);
}
// Добавление элемента вектора
void Myvector::Add(double a, double b, double c)
{
SostFunc sf(a,b,c);
inVector.push_back(sf);
}
// Строка для вывода
string Myvector::DericateFormula(void)
{
ostringstream ost;
for (int i = 0;i < inVector.size();i++)
{
SostFunc sf = inVector[i];
ost<<i<<": "<< sf.DericateFormula();
}
string buf( ost.str() );
return buf;
}
[/code]
В классе Myvector использован контейнерный класс <vector>
Соответственно, можно выводить формулы любого класса функций, можно вывести весь класс "вектор".
Можно добавлять элементы вектора.
Можно получать данные из элементов вектора, соответствующим перегруженным оператором [].
Как пример функция main может быть такой:
[code lang=php h=200]
int _tmain(int argc, _TCHAR* argv[])
{
//объект класса myvector
Myvector myvector(1,2,5);
//Добавляем элемент вектора
myvector.Add(2,1,3);
//Объект класса SostFunc
SostFunc sf(4,2,3);
//Выводим все элементы вектора на экран
cout<< myvector << endl;
//Приравнием первому элементу вектора объект класса SostFunc
//Должны поменяться коэффициенты у функций вывода
myvector[0] = sf;
//Выведем вектор на экран
cout<< myvector<< endl;
string a;
//Чтобы консольное окно сразу не свернулось
cin>>a;
return 0;
}[/code]
Так же прикладываю проект в VS 2008.
скачать файл Vector.zip [1.63 Mб]