避免在hpp文件中公开私有成员变量

时间:2016-02-22 01:41:49

标签: c++ c++11 boost

我已经实现了一个班级buffer_manager。这个类的目的是为我的udp_clienttcp_client应用程序提供缓冲区。

buffer_manager.hpp

#ifndef BUFFER_MANAGER_H
#define BUFFER_MANAGER_H

#include <iostream>
#include <exception>
#include <boost/array.hpp>
#include <boost/algorithm/hex.hpp>
#include <algorithm>
#include <iomanip>


class buffer_manager
{
public:
    typedef boost::array<unsigned char, 4096> m_array_type;
    buffer_manager();
    ~buffer_manager();
    void message_buffer(m_array_type &recv_buf);
    buffer_manager::m_array_type & get_recieve_array();
    std::string & get_message_string();

private:
  std::string m_message;
  m_array_type m_recv_buf;
};

#endif //BUFFER_MANAGER_H   

buffer_manager.cpp

#include <iostream>                                                                                                                                                                                                
#include <boost/array.hpp>
#include <boost/algorithm/hex.hpp>
#include <algorithm>
#include "buffer_manager.hpp"

buffer_manager::buffer_manager()
{

}
buffer_manager::~buffer_manager()
{

}
void buffer_manager::message_buffer(m_array_type &recv_buf)
{
    boost::algorithm::hex(recv_buf.begin(), recv_buf.end(), back_inserter(m_message));
}

buffer_manager::m_array_type& buffer_manager::get_recieve_array()
{
  return m_recv_buf;
}

std::string & buffer_manager::get_message_string()
{
  return m_message;
}

有人告诉我,如果你不打算继承这个类,就不需要在头文件中公开成员变量了。

std::string m_message;
m_array_type m_recv_buf;

如果不在头文件中公开私有成员变量,可以选择执行此操作。这种方法有什么好处。

2 个答案:

答案 0 :(得分:3)

这不太正确。有些技术更先进(如pimpl习惯用法或虚拟基类),但对于正常使用,它们必须位于头文件中。

答案 1 :(得分:0)

这样做的方法是将私有变量移动到.cpp文件。翻译单元中的任何静态全局变量基本上都是“私有的”,因为无法从其他文件访问它们。理由(据我所知)是,当您阅读头文件以进行概要时,认知负荷会减少。