gpt4 book ai didi

c++ - 类定义应该放在全局还是局部范围内?

转载 作者:行者123 更新时间:2023-11-28 01:30:04 24 4
gpt4 key购买 nike

各位程序员。我发现将类定义放在源文件的全局范围内是一种常见的做法,在 main() 函数之上 我现在不担心类定义的细节。

class Dog { ... };

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

我们为什么要这样做?这是一条规则还是只是一个共同的约定?我们是否也可以将类定义放在 main() 函数中?这样做的优点/缺点是什么?

考虑以下两行代码:

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

在我看来,class Dog { ... } 只是一种数据类型,就像 int 一样。

如果我打算只在 main() 函数中使用某个类的对象,为什么不把类定义也放在 ​​main() 函数中呢?这是糟糕的编程习惯吗?或者这是只有 C 程序员才能用结构做的事情吗?将类定义放在全局范围内的原因是什么?

int main() {
class Dog { ... };

Dog d1;
...
return 0;
}

最佳答案

如果将 Dog 的定义放在 main 中,则该定义的作用域与其他名称一样。

这意味着 main 之外的函数看不到 Dog 的定义,因此您不能定义(例如)采用 的函数Dog 作为参数。所以,这有效:

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);
}

...并添加 Dog 的前向声明也不起作用。

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

一些类型仅供另一种特定类型使用,在这种情况下,它们通常在该类型中定义:

class linked_list {
class node {};
};

现在有一个名为 linked_list::node 的类型,但是您需要 linked_list 限定符来查找 node(当然,node 必须公开才能让 linked_list 之外的任何人使用它,而在这里它显示为私有(private))。

关于c++ - 类定义应该放在全局还是局部范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51904453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com