C++ class definition split into two headers?

2019-02-28 08:59发布

问题:

Is it possible in C++ to split the definition of class members in two headers? What would be the appropriate way to code it?

For instance:

a1.h

class A {
    public:
        int var;
        void foo1(int b);
}

a1.cpp

#include "a1.h"

void A::foo1(int b) {
    cout << b;
}

a2.h

[extend] class A {
    public:
        void foo2(double c);
}

a2.cpp

#include "a2.h"

void A::foo2(double c) {
    cout << c;
}

回答1:

You can't extend a class that way, but you can use the pimpl pattern:

class A {
public:
    void foo1(int b);
private:
    AImpl* pimpl;

}

and then have AImpl.h and AImpl.cpp that hides all the private details.