隐藏struct具体实现细节

我们知道对于struct,其所有的成员默认情况下是所有对外可见的,即为public属性。但是有时候为了提高程序的封装性,我们需要将struct的内容细节隐藏起来,怎么做呢?可以使用下面这种做法达到目的。

// a.h
typedef struct A At;

class Test {
          
   
public:
	 Test(int a);
	 int Get();
	 At* _a;
};
// a.cpp
#include "a.h"
typedef struct A {
          
   
	 int a;
} At;

Test::Test(int a_) {
          
   
	 _a = new At;
	 _a->a = a_;
}

int Test::Get() {
          
   
	 return _a->a;
}
// main.cpp
#include "a.h"
#include <iostream>
int main() {
          
   
		Test t(10);
		std::cout << t.Get() << std::endl;
}

上述的实现方式归根结底就是将实现定义在cpp中,而.h中只做声明。这样外部直接使用struct的成员的时候会报错是不完整的类型,所以此时就达到了隐藏的目的,强制我们通过类中的预定义函数Get()进行访问结构体。

经验分享 程序员 微信小程序 职场和发展