Files
clang-uml/docs/test_cases/t00002.md
2021-08-03 23:48:37 +02:00

1.4 KiB

t00002 - Basic class inheritance

Config

compilation_database_dir: ..
output_directory: puml
diagrams:
  t00002_class:
    type: class
    glob:
      - ../../tests/t00002/t00002.cc
    using_namespace:
      - clanguml::t00002
    include:
      namespaces:
        - clanguml::t00002
    plantuml:
      after:
        - 'note left of @A(A) : Base abstract interface.'

Source code

File t00002.cc

#include <vector>

namespace clanguml {
namespace t00002 {

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

class B : public A {
public:
    virtual void foo_a() override { }
};

class C : public A {
public:
    virtual void foo_c() override { }
};

class D : public B, public C {
public:
    void foo_a() override
    {
        for (auto a : as)
            a->foo_a();
    }

    void foo_c() override
    {
        for (auto a : as)
            a->foo_c();
    }

private:
    std::vector<A *> as;
};

//
// NOTE: libclang fails on:
//
//   class D : public virtual B, public virtual C {
//
class E : virtual public B, virtual public C {
public:
    void foo_a() override
    {
        for (auto a : as)
            a->foo_a();
    }

    void foo_c() override
    {
        for (auto a : as)
            a->foo_c();
    }

private:
    std::vector<A *> as;
};
}
}

Generated UML diagrams

t00002_class