加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网_福州站长网 (https://www.0591zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

分享一下8年C++面向对象设计的经验体会

发布时间:2020-12-30 18:56:04 所属栏目:创业 来源:网络整理
导读:副标题#e# 六年前,我刚热恋“面向对象”(Object-Oriented)时,一口气记住了近十个定义。六年后,我从几十万行程序中滚爬出来准备写点心得体会时,却无法解释什么是“面向对象”,就象说不清楚什么是数学那样。软件工程中的时髦术语“面向对象分析”和“

如果允许Head 从Eye、Nose、Mouth、Ear 派生而成,那么Head 将自动具有Look、Smell、Eat、Listen 这些功能:

// 错误的设计  
class Head : public Eye,public Nose,public Mouth,public Ear  
{  
}; 

上述程序十分简短并且运行正确,但是这种设计却是错误的。很多程序员经不起“继承”的诱惑而犯下设计错误。

  一只公鸡使劲地追打一只刚下了蛋的母鸡,你知道为什么吗?

  因为母鸡下了鸭蛋。

  1.3 虚函数与多态

  除了继承外,C++的另一个优良特性是支持多态,即允许将派生类的对象当作基类的对象使用。如果A 是基类,B 和C 是A 的派生类,多态函数Test 的参数是A 的 指针。那么Test 函数可以引用A、B、C 的对象。示例程序如下:

class A  
{  
public:  
void Func1(void);  
};  
void Test(A *a)  
{  
a->Func1();  
}  
class B : public A  
{  
…  
};  
class C : public A  
{  
…  
};  
// Example  
int main()  
{  
A a;  
B b;  
C c;  
Test(&a);  
Test(&b);  
Test(&c);  
return 0;  
}; 

以上程序看不出“多态”有什么价值,加上虚函数和抽象基类后,“多态”的威力就显示出来了。

  C++用关键字virtual 来声明一个函数为虚函数,派生类的虚函数将(override)基类对应的虚函数的功能。示例程序如下:

class A  
{  
public:  
virtual void Func1(void){ cout<< “This is A::Func1 n”}  
};  
void Test(A *a)  
{  
a->Func1();  
}  
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  
int main()  
{  
A a;  
B b;  
C c;  
Test(&a); // 输出This is A::Func1  
Test(&b); // 输出This is B::Func1  
Test(&c); // 输出This is C::Func1  
return 0;  
}; 

如果基类A 定义如下:

class A  
{  
public:  
virtual void Func1(void)=0;  
};  

那么函数Func1 叫作纯虚函数,含有纯虚函数的类叫作抽象基类。抽象基类只管定义纯虚函数的形式,具体的功能由派生类实现。

  结合“抽象基类”和“多态”有如下突出优点:

  (1)应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。这一

  招叫“以不变应万变”,可以大大提高程序的可复用性(这是接口设计的复用,而不是代码实现的复用)。

  (2)派生类的功能可以被基类指针引用,这叫向后兼容,可以提高程序的可扩充性和可维护性。以前写的程序可以被将来写的程序调用不足为奇,但是将来写的程序可以被以前写的程序调用那可了不起。

  2 良好的编程风格

  内功深厚的武林高手出招往往平淡无奇。同理,编程高手也不会用奇门怪招写程序。良好的编程风格是产生高质量程序的前提。

  2.1 命名约定

(编辑:安卓应用网_福州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读