美文网首页
C++ 编程技巧与规范(四)

C++ 编程技巧与规范(四)

作者: e196efe3d7df | 来源:发表于2020-11-20 14:49 被阅读0次

组合关系

has-a 关系

has-a 关系也称为 is-part-of关系。下面的定义了这种关系:

namespace demo8 {
    class Info {
    private:
        std::string name;
        std::string address;
        int age;
    };

    class Human {
    public:
        Info info;
    };
}

可以是说是 Human has-a Info, 也可以说是 Info is-part-of Human。

is-implemented-in-terms-of关系

这种关系可以描述为:根据...实现出...。
示例:根据multimap实现自定义map,不允许包含重复key。

namespace demo9 {
    template<typename T, typename U>
    class smap {
    public:
        void insert(const T& key, const U& value)
        {
            if (m_map.find(key) != m_map.end())
                return;
            m_map.insert(std::make_pair(key, value));
        }

        void printMap()
        {
            std::cout << "map.size() = " << size() << std::endl;
            for (auto key_value : m_map)
            {
                std::cout << "key:" << key_value.first << ",value:" << key_value.second << std::endl;
            }
        }

        size_t size()
        {
            return m_map.size();
        }
    private:
        std::multimap<T, U> m_map;
    };

    void mainFunc()
    {
        smap<int, int> myMap;
        myMap.insert(1, 2);
        myMap.insert(2, 3);
        myMap.insert(1, 3);
        myMap.printMap();
    }
}
int main()
{
    demo9::mainFunc();
}

组合关系的UML图:


组合关系

实心菱形框表示:如果创建了一个Human类对象(整体对象),其中就会包含一个Info类对象(成员对象),有相同的生命周期。

委托关系

即Delegation关系,一个类中包含指向另一个类的指针。该对象上产生的行为,会交给委托对象去执行。两者的生命周期不必相同。

namespace demo10 {
    class A {
    public:
        void doSomething()
        {
            std::cout << "A::doSomething()" << std::endl;
        }
    };

    class B {
    public:
        B(A* temp) :a(temp) {}

        void doSomething() {
            a->doSomething();
        }
    private:
        A* a;
    };

    void mainFunc()
    {
        A* a = new A();
        B* b = new B(a);

        b->doSomething();

        delete b;
        delete a;
    }
}

int main()
{
    demo10::mainFunc();
}

委托关系的UML图:


委托关系

相关文章

  • C++ 编程技巧与规范(四)

    组合关系 has-a 关系 has-a 关系也称为 is-part-of关系。下面的定义了这种关系: 可以是说是 ...

  • C++ 编程技巧与规范(五)

    不能被拷贝构造和拷贝赋值的类对象 delete 用delete这种方式,需要自己提供构造函数。 加入以上处理后,当...

  • C++ 编程技巧与规范(二)

    拷贝构造函数和拷贝复制运算符的书写 如下: 对象自我赋值产生的问题 对象的自我赋值,会产生一些问题,比如: A的赋...

  • C++ 编程技巧与规范(一)

    静态对象的探讨 类中静态成员变量 静态成员变量,需要先声明,然后再定义。如果没有使用到该静态成员变量,则可以不用定...

  • C++ 编程技巧与规范(三)

    类的public继承(is-a关系)及代码编写规范 子类继承父类的方式有三种:public, protected,...

  • 极客班第一周学习笔记

    初识C++ C++是在C之上基于对象,面向对象的编程语言。c++相比c在编程上更加模块化,具象化。 C++代码规范...

  • C++面向对象高级编程(上)笔记

    1.培养规范、大气的编程习惯 C++的学习过程可以分为C++语言与C++标准库两个部分,不必太在乎版本。标准库一般...

  • C++ 编程规范

    C++ 编程规范 这是一本 由两位世界顶级专家联袂巨献,适合所有层次 C++程序员 的 C++ 界20年集大成之作...

  • C++ 编程规范

    组织 不要拘泥于小节 在高警告级别干净利落地进行编译 使用自动构建系统 适用版本控制系统 在代码审查上投入 设计 ...

  • C++编程规范

    序 C++用法很多,包容性也比较强。一个C++的工程可能包含了各种各样没见过的用法。本篇内容主要是参照谷歌C++标...

网友评论

      本文标题:C++ 编程技巧与规范(四)

      本文链接:https://www.haomeiwen.com/subject/wjsliktx.html