如今想设计这样的一个计算器类,对提交上来的数据进行运算并返回结果:
cpp
class calculation
{
public:
calculation(int a, int b, string op) :_a(a), _b(b), _op(op)
{};
int getret()
{
if (_op == "+")
return _a + _b;
if (_op == "-")
return _a - _b;
if (_op == "*")
return _a * _b;
if (_op == "/")
return _a / _b;
}
private:
int _a;
int _b;
string _op;
int _ret = 0;
};
void test()
{
calculation* ca1 = new calculation(1, 1, "+");
cout << ca1->getret()<<endl;
calculation* ca2 = new calculation(1, 1, "*");
cout << ca2->getret()<<endl;
}
int main()
{
test();
return 0;
}
但是这段代码存在问题:如果想对该计算器类增添新的功能,比如说取余或者开方等等。那么就需要修改函数内的代码,这样就导致了一个问题:我们在修改代码的时候可能会出错,导致一系列后果,这就是所谓的高耦合。但是我们想到的是低耦合的代码。所以可以将不同的运算分别写在一个类中。这样就避免了上述问题:
cpp
#include<iostream>
using namespace std;
class getretClass
{
virtual int getret() = 0;
};
class Plus:public getretClass
{
public:
Plus(int a, int b) :_a(a), _b(b) {};
virtual int getret()
{
return _a + _b;
}
private:
int _a;
int _b;
};
class Minus:public getretClass
{
public:
Minus(int a, int b) :_a(a), _b(b) {};
virtual int getret()
{
return _a - _b;
}
private:
int _a;
int _b;
};
// 其他运算省略了
void test()
{
Plus* plus = new Plus(1, 2);
cout << plus->getret() << endl;
Minus* minus = new Minus(2, 1);
cout << minus->getret() << endl;
}
int main()
{
test();
return 0;
}