我无法在此网站上找到类似的问题,但可以在两个不同的文件中声明一个类。
例如,文件和私有中的所有公共类组件以及不同文件中的其他组件。publics.h
class test {
public:
int geta();
void seta(int);
};
privates.h
class test {
private:
int a;
};
上述方式肯定是错误的,但有没有这样的方法。
答案 0 :(得分:7)
有一种方法可以获得非常相似的东西:private inheritance。
// 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; }
};
请注意,您仍然需要(间接)在使用公共类的任何模块中包含私有标头,因此您不会以任何方式隐藏任何内容。
答案 1 :(得分:4)
不是那样,但pimpl idiom (or opaque pointer, or Chesshire cat)可以帮助您实现类似的功能 - 您可以提供一个公共接口,其中所有实现细节都隐藏在实现成员中。
C ++不支持部分类。
另外,请注意您所拥有的是类定义,而不是声明。 C ++要求如果一个类的多个定义可用,它们必须相同,否则它是未定义的行为。
答案 2 :(得分:0)
这是抽象基类
的一个很好的用例 //File test.h
class test {
public:
virtual ~test() {}
virtual int geta()=0;
virtual oid 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;
};