面向对象编程好处:
1 、易维护
采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高
在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
3、效率高
在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展
由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
案例1 组装电脑
刚开始的思路是设计出抽象类 再利用多态来实现 ,顺便使用函数来实现,但这样复用性不高
我先展示我用函数实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
class cpu
{
public:
virtual void caculate() = 0;
};
class Card
{
public:
virtual void display() = 0;
};
class Memory
{
public:
virtual void storage() = 0;
};
//*********************************
//抽象层
class lenovo :public cpu, public Card, public Memory
{
virtual void caculate()
{
cout << "联想的cpu正在计算" << endl;
}
virtual void display()
{
cout << "联想的芯片正在工作" << endl;
}
virtual void storage()
{
cout << "联想的内存条正在使用" << endl;
}
};
class Nvida :public Card
{
virtual void display()
{
cout << "nvida的显卡" << endl;
}
};
class inter_card :public Card
{
public:
virtual void display()
{
cout << "INTER的显卡" << endl;
}
};
class intercpu :public cpu
{
virtual void caculate()
{
cout << "inter的cpu正在运行" << endl;
}
};
class intermomory :public Memory
{
public:
virtual void storage()
{
cout << "inter的内存正在使用" << endl;
}
};
class kingstom :public Memory
{
public:
virtual void storage()
{
cout << "kingstom内存" << endl;
}
};
void computer(cpu*a,Card*b,Memory*c)
{
a->caculate();
b->display();
c->storage();
if (a != NULL && b != NULL && c!= NULL)
{
delete a, b, c;
}
}
int main()
{
cpu* cpu_1 = new intercpu;
Card* card_1 = new inter_card;
Memory* meor = new intermomory;
computer(cpu_1, card_1, meor);//组装电脑1
//经过该函数后内存被释放
// 组装电脑2
cpu_1 = new intercpu;
meor = new kingstom;
card_1 = new Nvida;
computer(cpu_1, card_1, meor);
return 0;
}
这样使用虽说能实现最终的目的 但是不是面向对象编程 而且这样的扩展性不高
使用面向对象编程扩展性更好 接下来展示代码
class Computer //通过一个电脑类来实现 减少复用
{
public:
Computer(cpu*c1,Card*c2,Memory*c3) //构造函数用来初始化成员变量
{
this->CPU = c1;
this->CARD = c2;
this->MEMORY = c3;
}
void work()//通过类方法来实现
{
this->CPU->caculate();
this->CARD->display();
this->MEMORY->storage();
}
private:
cpu* CPU;
Card* CARD;
Memory* MEMORY;
};
int main()
{
cpu* cpu_1 = new intercpu;
Card* card_1 = new inter_card;
Memory* meor = new intermomory;
Computer* one = new Computer(cpu_1, card_1, meor);
one->work();
delete one;
cout << "*****************************************" << endl;
cpu *cpu_2 = new intercpu;
Memory* meor2 = new kingstom;
Card*card_2 = new Nvida;
one = new Computer(cpu_2, card_2, meor2);
one->work();
delete one;
}
这样更加符合开发