软件工程思想——c面向对象程序设计(编辑修改稿)内容摘要:

t 函数可以引用 A、 B、 C 的对象。 示例程序如下: class A { public: void Func1(void)。 }。 void Test(A *a) { aFunc1()。 } class B : public A { … }。 class C : public A { … }。 // Example main() { A a。 B b。 C c。 Test(amp。 a)。 Test(amp。 b)。 Test(amp。 c)。 }。 以上程序看不出“多态”有什么价值,加上虚函数和抽象基类后,“多态”的威力就显示出来了。 C++用关键字 virtual 来声明一个函数为虚函数,派生类的虚函数将覆盖( override)基类对应的虚函数的功能。 示例程序如下: class A { public: virtual void Func1(void){ cout “This is A::Func1 \n”} }。 void Test(A *a) { aFunc1()。 } class B : public A { public: virtual void Func1(void){ cout “This is B::Func1 \n”} }。 class C : public A { public: virtual void Func1(void){ cout “This is C::Func1 \n”} }。 // Example main() { A a。 B b。 C c。 Test(amp。 a)。 // 输出 This is A::Func1 Test(amp。 b)。 // 输出 This is B::Func1 Test(amp。 c)。 // 输出 This is C::Func1 }。 如果基类 A 定义如下: class A { public: virtual void Func1(void)=0。 }。 那么函数 Func1 叫作纯虚函数,含有纯虚函数的类叫作抽象基类。 抽象基类只管定义纯虚函数的形式,具体的功能由派生类实现。 结合“抽象基类”和“多态”有如下突出优点: ( 1)应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。 这一招叫“以不变应万变”,可以大大提高程序的可复用性(这是接口设计的复用,而不是代码实现的复用)。 ( 2)派生类的功能可以被基类指针引用,这叫向后兼容,可以提高程序的可扩充性和可维护性。 以前写的程序可以被将来写的程序调用不足为奇,但是将来写的程序可以被以前写的程序调用那可了不起。 良好的编程风格 内功深厚的武林高手出招往往平淡无奇。 同理,编程高手也不会用奇门怪招写程序。 良好的编程风格是产生高质量程序的前提。 命名约定 有不少人编程时用拼音给函数或变量命名,这样做并不能说明你很爱国,却会让用此程序的人迷糊(很多南方人不懂拼音,我就不懂)。 程序中的英文一般不会太复杂,用词要力求准确。 匈牙利命名法是 Microsoft 公司倡导的 [Maguire 1993],虽然很烦琐,但用习惯了也就成了自然。 没有人强迫你采用何种命名法,但有一点应该做到:自己的程序命名必须一致。 以下是我编程时采用的命名约定: ( 1)宏定义用大写字母加下划线表示,如 MAX_LENGTH; ( 2)函数用大写字母开头的单词组合而成,如 SetName, GetName ; ( 3)指针变量加前缀 p,如 *pNode ; ( 4) BOOL 变量加前缀 b,如 bFlag ; ( 5) int 变量加前缀 i,如 iWidth ; ( 6) float 变量加前缀 f,如 fWidth ; ( 7) double 变量加前缀 d,如 dWidth ; ( 8)字符串变量加前缀 str,如 strName ; ( 9)枚举变量加前缀 e,如 eDrawMode ; ( 10)类的成员变量加前缀 m_,如 m_strName, m_iWidth ; 对于 int, float, double 型的变 量,如果变量名的含义十分明显,则不加前缀,避免烦琐。 如用于循环的 int 型变量 i,j,k ; float 型的三维坐标( x,y,z)等。 使用断言 程序一般分为 Debug 版本和 Release 版本, Debug 版本用于内部调试, Release 版本发行给用户使用。 断言 assert 是仅在 Debug 版本起作用的。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。