6

我无法在本网站的其他地方找到类似的问题,但是否可以在两个不同的文件上声明一个类。

例如,一个文件中的所有公共类组件和不同文件中的私有和其他组件。

公众.h

    class test {
     public:
        int geta();
        void seta(int); 
    };

私人的.h

    class test {
     private:
        int a;
    };

上面的方法肯定是错误的,但是有没有这样的方法。

4

3 回答 3

8

有一种方法可以得到非常相似的东西:私有继承

// private.hpp
class test_details {
  protected:
    int a;
};

// public.hpp

#include "private.hpp"

class test : private test_details {
  public:
    int geta() const { return a; }
    void seta(int i) { a = i; }
};

请注意,您仍然需要(间接)在使用公共类的任何模块中包含私有标头,因此您并没有真正以这种方式隐藏任何东西。

于 2012-07-03T09:49:37.117 回答
6

并非如此,但pimpl idiom(或不透明指针,或 Chesshire 猫)可以帮助您实现类似的功能 - 您可以提供一个公共接口,其中所有实现细节都隐藏在实现成员中。

C++ 不支持部分类。

另外,请注意,您所拥有的是类定义,而不是声明。C++ 规定,如果一个类的多个定义可用,它们必须是相同的,否则就是未定义的行为。

于 2012-07-03T09:43:35.243 回答
1

这是抽象基类的一个很好的用例

 //File test.h
 class test {
     public:
        virtual ~test() {}
        virtual int geta()=0;
        virtual void seta(int)=0; 
    };

 //File test_impl.h
 class test_impl : public test {
     public:
        int geta() { return a; }
        void seta(int a ) { a = v; }
     private:
        int a;
    };
于 2012-07-03T09:45:59.363 回答