以下是披着面向对象外衣的面向过程编程(我们项目里面有很多这样的情况),请改编成真正的面向对象程序。
class T { };
class T1 : public T
{
public:
void DoSth1(){ }
};
class T2 : public T
{
public:
void DoSth2(){ }
};
void foo(T* pT)
{
T1* pT1 = dynamic_cast<T1*>(pT);
if (pT1 != NULL) {
pT1->DoSth1();
}
T2* pT2 = dynamic_cast<T2*>(pT);
if (pT2 != NULL) {
pT2->DoSth2();
}
}
参考答案:
C++的面向对象风格:
struct T { virtual void Do()=0; //新增的 };
struct T1:public T
{
virtual void Do() { DoSth1(); }
void DoSth1(){ }
};
struct T2:public T
{
virtual void Do() { DoSth2(); }
void DoSth2(){ }
};
void foo(T* pT) //客户端代码
{
pT->Do(); //使用虚函数替换dynamic_cast
}
面向对象相对面向过程的优势在哪里?更好的符合开闭原则(对扩展开放,对修改关闭)。
例如要增加T3类型,面向过程的代码里面要修改已有代码foo函数(增加分支),
面向对象的代码只要增加T3类型就OK了,不需要改动客户端代码(foo函数),
这叫向后兼容(后人写的程序可以被前人调用)。
本文通过一个实例展示了如何将面向过程的编程方式转换为面向对象的编程方式,并解释了面向对象编程的优势,特别是在遵循开闭原则方面。

被折叠的 条评论
为什么被折叠?



