代码复用 -- 组合和继承

来源:互联网 发布:淘宝简约店招 编辑:程序博客网 时间:2024/06/05 10:00

软件复用实际上是代码的重复使用。
C语言中采用:函数 宏
C++中采用:继承 组合
某类以另一个类对象作数据成员,称为组合


在逻辑上,如果类A是类B的一部分(a part of)或者说HAS-A(“有一个”),不要从A类派生出类B,而应当采用组合的方式。
《高质量C++编程指南》中“眼睛、鼻子、嘴巴、耳朵和头部”的范例很好地解释了组合的本质:眼睛、鼻子、嘴巴、耳朵分别是头部的一部分,头部并不是从眼睛、鼻子、嘴巴、耳朵继承来的。

如下实例:

 /***********************/ //2016-03-09 14:02:57 /***********************/#include <iostream>using std::endl;using std::cout;class Eye{public:    void look()    {        cout << "Eye.look()" << endl;    }};class Nose{public:    void smell()    {        cout << "Nose.smell()" << endl;    }};class Mouth{public:    void eat()    {        cout << "mouth.eat()" << endl;    }};class Ear{public:    void listen()    {        cout << "Ear.listen()" << endl;    }};//组合方式:逻辑清晰,易扩展class Head{private:    Eye _eye;    Nose _nose;    Mouth _mouth;    Ear _ear;public:    void look(){        _eye.look();    }    void smell(){        _nose.smell();    }    void eat(){        _mouth.eat();    }    void listen(){        _ear.listen();    }};//继承方式,实际设计复杂,逻辑不清晰class Head2: public Eye, public Nose, public Mouth, public Ear{};int main(){    Head h;    h.look();    h.smell();    h.eat();    h.listen();    cout << endl;    Head2 h2;    h2.look();    h2.smell();    h2.eat();    h2.listen();    cout << endl;    return 0;}/* Eye.look() * Nose.smell() * mouth.eat() * Ear.listen() * * Eye.look() * Nose.smell() * mouth.eat() * Ear.listen() * * */
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子不愿意去补课怎么办 高中孩子不愿意补课怎么办 孩子协调性不好怎么办 孩子暑假不愿意补课怎么办 话唠的孩子怎么办 孩孑不做作业怎么办 孩子有消极情绪怎么办 孩子太依赖奶奶怎么办 缺少母爱的孩子怎么办 孩子分房睡害怕怎么办 孩子厌烦写作业怎么办 孩子怕黑胆小怎么办 孩子性格太急躁怎么办 性格急躁的孩子怎么办 我儿子脾气暴躁怎么办 我妈脾气不好怎么办 妈妈更年期怎么办 脾气暴躁 宝妈脾气不好怎么办 我妈妈脾气不好怎么办 孩子写作业拖拖拉拉怎么办 家长指出老师错误怎么办 二年级小孩厌学怎么办 5岁儿童厌学怎么办 8岁儿童厌学怎么办 2岁宝宝撒娇怎么办 宝宝两周岁叛逆怎么办 孩子不讲究卫生怎么办 孩子屡次犯错了怎么办 6岁宝宝不听话怎么办 2岁宝宝打人怎么办 四岁宝宝顶嘴怎么办 猫咪咬人不听话怎么办 猫咪剪指甲不听话怎么办 孩子不听话怎么办?无须打骂 儿子脾气倔强不听话怎么办 20岁儿子不听话怎么办 儿子24岁不听话怎么办 不听建议的孩子怎么办 孩子不知道感恩怎么办 两个月孩子哭闹怎么办 测试出怀孕不要怎么办