拆分C ++类声明

Tro*_*dor 5 c++

我想知道我是否可以拆分C ++类声明

原班

    class P
    {
        private: 
           int id;
           //some really secret method
           int secretMethod();
       protected:
           int x;
       public:
           P();
           int getX();
    };
Run Code Online (Sandbox Code Playgroud)

我只想在.h中显示public和protected方法和属性,并在其他地方声明private,而类的用户看不到它。

想要的类声明:

    class P
    {
       protected:
           int x;
       public:
           P();
           int getX();
    };
Run Code Online (Sandbox Code Playgroud)

编辑:我想要的是:

  1. 我可以更改类的实现,并且对于该类的用户是透明的
  2. 用户更容易看到更少的信息
  3. 如果我更改类的实现,请更改私有属性和方法,我不想为该类的用户更改.h

Edw*_*nge 5

是的,有可能,但不是直接的方式。这是您的工作:

my_object.h:

struct my_object {
  void fun();

  my_object();
  my_object(my_object const&);
  ~my_object();

  my_object& operator = (my_object);

protected:
  void pfun();

private:
  struct impl;
  std::unique_ptr<impl> pimpl;
};
Run Code Online (Sandbox Code Playgroud)

my_object.cpp:

struct my_object::impl {
  void fun() { do stuff...}

  void pfun() { do other stuff... }

  int private_member;
};

my_object::my_object() : pimpl(new impl) {}
my_object::my_object(my_object const& o) : pimpl(new impl(*o.pimpl) {}
my_object::~my_object() {}

my_object& my_object::operator = (my_object o) { swap(pimpl, o.pimpl); return *this; }

void my_object::fun() { pimpl->fun(); }
void my_object::pfun() { pimpl->pfun(); }
Run Code Online (Sandbox Code Playgroud)

如您所见,这需要大量工作,并且需要堆。一切保持平衡...在需要时使用。