不同文件的类声明
class declaration over different files
我无法在这个站点上找到类似的问题,但是是否可以在两个不同的文件上声明一个类。
例如,文件中的所有公共类组件以及不同文件中的私有和其他组件。
公众.h
class test {
public:
int geta();
void seta(int);
};
私人.h
class test {
private:
int a;
};
以上方式肯定是错误的,但是有没有这样的方法。
有一种方法可以得到非常相似的东西:私有继承。
// 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; }
};
请注意,您仍然需要(间接)在使用公共类的任何模块中包含私有标头,因此您不会以这种方式真正隐藏任何内容。
不是那样的,但 pimpl 习语(或不透明的指针,或柴郡猫)可以帮助您实现类似的功能 - 您可以提供一个公共接口,其中所有实现详细信息都隐藏在实现成员中。
C++不支持分部类。
另外,请注意,您那里有的是类定义,而不是声明。C++规定,如果一个类有多个定义可用,它们必须相同,否则就是未定义的行为。
这是抽象基类的一个很好的用例
//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;
};
相关文章:
- .cpp和.h文件中的模板专用化声明
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 用"=default"声明的函数应该只在头文件中执行
- 调用在 HXX 文件中声明的静态数据成员
- 如何在 c++ 的不同文件中声明类?
- 如何在头文件中声明类模板(由于循环依赖关系)
- 声明要在 qml 和 cpp 文件中使用的全局字符串
- 在.cpp文件之间传递结构声明,而不使用全局头文件
- 为什么要将函数声明和定义放在单独的文件中
- 枚举前向声明与头文件
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- 在带有类型保护的模板文件中使用前向声明
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 在多个头文件中从接口声明被覆盖的函数时,如何避免重复代码?
- 当我可以在头文件中声明和定义所有文件时,为什么要创建一个.cpp文件?
- 文件存在时的最新检查声明生成输入"is missing"
- 在实现文件中使用模板参数声明方法
- 包含文件中的 Typdef "未在此范围内声明"
- 带有正向声明的Co-Dependent.h文件
- 无法声明文件指针数组