#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对象