main.cpp:
#include <iostream>
#include <string>using namespace std;
#include "operation.h"
#include "operationAdd.h"
#include "operationSub.h"
#include "operationMul.h"
#include "operationDiv.h"
#include "operationFactory.h"
int main()
{
Factory *q = new Factory();
//class Add
cout<<"class Add example:\n";
operation *p_add= q->create(1);
double number_A, number_B;
cout<<"please input number_A value:";
cin>>number_A;
p_add->setValueA(number_A);
cout<<"please input number_B value:";
cin>>number_B;
p_add->setValueB(number_B);
p_add->getResult();
delete p_add;
p_add = NULL;
//class Sub
cout<<"class Sub example:\n";
operation *p_sub = q->create(2);
cout<<"please input number_A value:";
cin>>number_A;
p_sub->setValueA(number_A);
cout<<"please input number_B value:";
cin>>number_B;
p_sub->setValueB(number_B);
p_sub->getResult();
delete p_sub;
p_sub = NULL;
//class Mul
cout<<"class Mul example:\n";
operation *p_mul = q->create(3);
cout<<"please input number_A value:";
cin>>number_A;
p_mul->setValueA(number_A);
cout<<"please input number_B value:";
cin>>number_B;
p_mul->setValueB(number_B);
p_mul->getResult();
delete p_mul;
p_mul = NULL;
//class Div
cout<<"class Div example:\n";
operation *p_Div = q->create(4);
cout<<"please input number_A value:";
cin>>number_A;
p_Div->setValueA(number_A);
cout<<"please input number_B value:";
cin>>number_B;
p_Div->setValueB(number_B);
p_Div->getResult();
delete p_Div;
p_Div = NULL;
return 0;
}
operation.h :
class operation
{
public:
virtual void getResult() = 0;
virtual void setValueA(double m_r) = 0;
virtual void setValueB(double m_r) = 0;
};
operationAdd.h :
class Add:public operation
{
private:
double number_A;
double number_B;
public:
//Add(double r);
void getResult();
void setValueA(double m_r);
void setValueB(double m_r);
};
void Add::getResult()
{
double result;
result = number_A + number_B;
cout<<"The result is :"<<result<<endl;
}
void Add::setValueA(double m_r)
{
number_A= m_r;
}
void Add::setValueB(double m_r)
{
number_B= m_r;
}
operationSub.h :
class Sub:public operation
{
private:
double number_A;
double number_B;
public:
//Add(double r);
void getResult();
void setValueA(double m_r);
void setValueB(double m_r);
};
void Sub::getResult()
{
double result;
result = number_A - number_B;
cout<<"The result is :"<<result<<endl;
}
void Sub::setValueA(double m_r)
{
number_A= m_r;
}
void Sub::setValueB(double m_r)
{
number_B= m_r;
}
operationMul.h :
class Mul:public operation
{
private:
double number_A;
double number_B;
public:
//Add(double r);
void getResult();
void setValueA(double m_r);
void setValueB(double m_r);
};
void Mul::getResult()
{
double result;
result = number_A * number_B;
cout<<"The result is :"<<result<<endl;
}
void Mul::setValueA(double m_r)
{
number_A= m_r;
}
void Mul::setValueB(double m_r)
{
number_B= m_r;
}
operationDiv.h :
class Div:public operation
{
private:
double number_A;
double number_B;
public:
//Add(double r);
void getResult();
void setValueA(double m_r);
void setValueB(double m_r);
};
void Div::getResult()
{
double result;
if (number_B == 0)
{
cout<<"The div data is not zero!!\n";
return;
}
result = number_A / number_B;
cout<<"The result is :"<<result<<endl;
}
void Div::setValueA(double m_r)
{
number_A= m_r;
}
void Div::setValueB(double m_r)
{
number_B= m_r;
}
operationFactory.h :
class Factory
{
public:
operation* create(int type)
{
switch (type)
{
case 1:
return new Add();
case 2:
return new Sub();
case 3:
return new Mul();
case 4:
return new Div();
default:
return NULL;
}
}
};
所有的.h文件跟.cpp文件一样!!
运行结果如下:
ngnsvr9 [** NONE **]/home/xionghailong/mode $ g++ main.cpp -o main
ngnsvr9 [** NONE **]/home/xionghailong/mode $ ./main
class Add example:
please input number_A value:1
please input number_B value:2
The result is :3
class Sub example:
please input number_A value:3
please input number_B value:4
The result is :-1
class Mul example:
please input number_A value:2
please input number_B value:3
The result is :6
class Div example:
please input number_A value:2
please input number_B value:3
The result is :0.666667