代码之家  ›  专栏  ›  技术社区  ›  Galaxy

类定义应该放在全局范围还是本地范围?

  •  0
  • Galaxy  · 技术社区  · 6 年前

    main() 函数我现在不担心类定义的细节。

    class Dog { ... };
    
    int main() {
        Dog dog1;
        ...
        return 0;
    }
    

    我们为什么要这样做?这是一个规则还是一个共同的惯例?我们还可以把类定义放在 功能?这样做的优点/缺点是什么?

    class Dog { ... } dog1;
    int dog1;
    

    在我看来 class Dog { ... } int 是。

    如果我要使用 主() 主() 也有功能?这是不好的编程实践吗?或者这是只有C程序员才能处理结构的事情?将类定义放入全局范围的原因是什么?

    int main() {
        class Dog { ... };
    
        Dog d1;
        ...
        return 0;
     }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Jerry Coffin    6 年前

    如果你把 Dog 里面 main ,该定义的作用域与其他名称一样。

    主要的 我看不出 ,因此不能定义(例如)函数 作为参数。所以,这是有效的:

    class Dog {};
    
    void foo(Dog const &d); // no problem
    
    int main() { 
        Dog d;
        foo(d);
    }
    

    void foo(Dog const &d);
    
    int main() { 
        class Dog {} d;
        foo(d);
    }
    

    ... 并添加 也没用。

    大多数类型基本上对所有代码都是可见的,因此它们通常在任何函数外部定义。

    class linked_list {
        class node {};
    };
    

    现在有一种类型名为 linked_list::node ,但你需要 linked_list node (当然, 节点 在外面什么都要公开 链接列表

        2
  •  1
  •   John Kugelman    6 年前

    很少有本地类会有用。举个例子:你能用 Dog 反对?你不能把它传递给任何其他函数。没有其他代码可以使用它。把它的数据封装在一个范围如此有限的对象中有什么意义?

    一个阶级所有的机器都能受益于如此有限的用途吗?构造函数、析构函数、成员函数、运算符重载等实际上并不有用。你愿意吗 private 变量?可能不是。关键是什么,没人能瞒着他们。

    有时创建一个本地 struct plain old data (POD) 结构。只有公共变量而没有成员函数的PODs对于快速分组两个相关值很有用。即使如此,这种用法也很少见。