从 C++ 中的结构到类 [重复]

Posted

技术标签:

【中文标题】从 C++ 中的结构到类 [重复]【英文标题】:From Struct to Class in C++ [duplicate] 【发布时间】:2015-02-09 18:39:25 【问题描述】:
struct Buffer
    int* p;
    unsigned n;
    mutable std::string toString; 
    mutable bool toStringDirty;
    Buffer (void); // implement it with correct initialization 
    Buffer (unsigned m, int val = 0); // inits with m ints with val
    Buffer (const Buffer& a) 
    Buffer::Buffer();
    if (a.n) 
         unsigned m = (n = a.n) * sizeof(int);
         memcpy(p = (int*) malloc(m), a.p, m);
    
    toString = a.toString;
    toStringDirty = a.toStringDirty;
    Buffer (const Buffer&&);
    int& operator[](unsigned i);
    const Buffer& operator=(const Buffer&&);
    const Buffer& operator=(const Buffer&);
    const Buffer& operator=(int val); //sets all with val
    const Buffer operator+(const Buffer& a) const; // concatenates
    // appends ‘a.first’ ints with an ‘a.second’ value
    const Buffer operator+(const std::pair<unsigned,int>& a) const;
    const Buffer operator-(unsigned m) const; // drops m ints at end
    // converts to string with caching support, format as [%d] per integer
    const std::string ToString (void) const;

;

我被赋予了这个结构来转换为一个 Buffer 类。我第一次遇到这个问题有什么注意事项吗?任何意见,将不胜感激。 我知道我必须使用正确的封装以及一些移动构造函数。有什么建议吗?谢谢。

【问题讨论】:

structclass 实际上是完全相同的东西,唯一的区别是,如果您不指定,则 struct 的所有成员都是 publicclassprivate。如果您在第一个属性之前添加public:,您会发现没有区别。虽然我会建议实际通过并故意决定应该是 publicprivate 一条评论 - 删除 int *p 成员并改用 std::vector&lt;int&gt; 【参考方案1】:

struct 和 class 在 c++ 中是相同的——除了成员在 struct 中默认为 public 而在 class 中默认为 private。所以你只需要决定哪些数据和函数需要公开,并将它们放在 public: 部分。经典的实现是没有数据是公开的

【讨论】:

以上是关于从 C++ 中的结构到类 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 c# 到 c++ 的结构中的元帅结构

将数组列表从接口实现传递到类[重复项]

从函数C++返回3个元素[重复]

如何从 C++ 中的函数返回结构?

C ++中的重复结构

如何将结构移动到类中?