嵌套类型:struct vs class

时间:2016-03-31 11:22:03

标签: c++ c++11 inner-classes

何时应该在类中的结构中定义成员,何时应该在嵌套类中定义成员?

例如:

class SkypeProtocol
{
public:
    SkypeProtocol();
    virtual ~SkypeProtocol(){}

private:

    class SkypeProtocolDateTime
    {
    private:
        UI32 uDate;
        ERROR GetDateString(PUCHAR pcBuffer,PUI32 uBufLen);
    };

};

class SkypeProtocol
{
private:
    SkypeProtocol();
    virtual ~SkypeProtocol(){}

    typedef struct SkypeProtocolDateTime
    {
    private:
        UI32 uDate;
        ERROR GetDateString(PUCHAR pcBuffer,PUI32 uBufLen);
    }SSKYPE_STRUCT;

};

4 个答案:

答案 0 :(得分:6)

在C ++中,类和结构之间没有区别,除了成员的默认可见性(类为private,结构为public)。

如果您的对象仅用于存储(没有很多逻辑实现),那么通常的做法是将其创建为结构,并仅将类用于更复杂的对象。

BTW:在C ++中,您不需要使用 { "status": "ok", "count": 10, "result": [ { "id": "51", "title": "a", "price": null }, { "id": "82", "title": "b", "price": null }, } 表示法,普通typedef struct {...} StructName;就足够了。

答案 1 :(得分:1)

def dist(n1, n2):
    x = n2[0]-n1[0]
    y = n2[1]-n1[1]
    return math.sqrt(x*x + y*y)   # or math.hypot(x, y)

distances = {}
for node in G.nodes():
    list_of_neigh = G.neighbors(node)
    distances[node] = [dist(node, x) for x in list_of_neigh]

我不想暴露我的私人。

答案 2 :(得分:0)

嵌套类不是优选的,有时可能真的混淆。如果你真的想以这种方式使用,那就很好。

当你嵌套一个类时,你可能正在进入并以某种方式保密更多数据,但是oop类设计也建议拆分每个类,即使你想在其他类中使用它们。

私人记忆功能是一个可以解决您的问题的主题,所以阅读和挖掘;)

答案 3 :(得分:0)

通常的做法是将struct用于无行为或被动对象。它可能包含CONSTANTS但缺乏功能性。日期成员应该直接访问而不是使用getter和setter方法,因为它具有默认的公共可见性。实际上它是google c ++风格指南的一部分,也是处理用户定义类型的非常简洁的方法。