#include <iostream>
using namespace std;
class Operationz
{
public :
double getnumberA()
{
return numberA;
}
void setnumberA(double value)
{
numberA = value;
}
double getnumberB()
{
return numberB;
}
void setnumberB(double value)
{
numberB = value;
}
virtual double getResult()
{
double result = 0;
return result;
}
protected:
double numberA , numberB ;
};
class OperationzAdd : public Operationz
{
public :
double getResult()
{
double result = 0;
result = numberA + numberB;
return result;
}
};
class OperationzSub : public Operationz
{
public :
double getResult()
{
double result = 0;
result = numberA - numberB;
return result;
}
};
class OperationzMul : public Operationz
{
public :
double getResult()
{
double result = 0;
result = numberA * numberB;
return result;
}
};
class OperationzDiv : public Operationz
{
public :
double getResult()
{
double result = 0;
if(numberB == 0)
{
cout<< "除数不能为0" <<endl;
exit(1);
}
result = numberA / numberB;
return result;
}
};
class OperationzFactory
{
public :
static Operationz* createOperationz(char opera)
{
Operationz* oper;
switch(opera)
{
case '+':
oper = new OperationzAdd();
break;
case '-':
oper = new OperationzSub();
break;
case '*':
oper = new OperationzMul();
break;
case '/':
oper = new OperationzDiv();
break;
default:
cout << "qing chuxin shuru" <<endl;
}
return oper;
}
};
int main()
{
Operationz *oper;
oper = OperationzFactory::createOperationz('+');
oper->setnumberA(10);
oper->setnumberB(2);
cout << oper->getResult() <<endl;
return 0;
}
大话设计模式代码c++实现
主要是c++和c#语法的不同。
在这次实验中,代码改造过程中发现:
1. c++中类前面不用public等修饰
2. c++中继承要指定继承方式,如class OperationzDiv : public Operationz,没有写publc则当作私有继承。
3. c++中new一个类返回的是指针,与c#,java不同,导致的结果是很多Operationz *oper形式的出现,也导致很多->的出现
4. 父类的成员变量要用protected修饰,否则子类无法继承。
5. c++不能对类的成员变量赋初值,除非是static
6. switch语句不能接收string对象