【问题标题】:What all are considered in the Class scope?在 Class 范围内考虑了哪些内容?
【发布时间】:2022-01-05 17:47:57
【问题描述】:

只是试图抓住围绕 C++ 中类范围的概念。如果我们举个例子:

#include <iostream>
using namespace std;
string barValue="OUTSIDE CLASS";

class foo
{
    public:
        void print_bar()
        {
            cout<<barValue<<endl;
        }
};

int main()
{
    foo f;
    f.print_bar();
    return 0;
}

我想知道:

  1. barValue 变量是否在 Class 范围内?
  2. 即使barValue 是在其中一个包含的文件中定义的,是否也能被接受?
  3. 文件和所有包含的文件是否可以作为foo类的作用域调用?
  4. 我可以理解,如果barValue在Class body之后定义,则不会被考虑。跟进是否意味着所有包含的文件都在 Class body 之前,并且通常在当前文件内容之前?

【问题讨论】:

  • “接受”是什么意思?
  • @NathanPierson 接受我的意思是它已被foo 类和print_bar 函数定义明确声明
  • (1) 在类范围内声明 - 没有。在课堂范围内可见 - 是的。通常我会理解“在课堂范围内”是指前者。 (4) 是的,包含通常排在其他所有内容之前。
  • @HolyBlackCat 如果你这么说,那么我的问题可以更好地形成,比如类的可见性范围是什么?
  • 这很复杂。通常你可以访问类之上的所有东西,不包括函数局部变量和非友元类的私有变量。模板有时也可以access things below themselves

标签: c++ class scope


【解决方案1】:

问题 1

barValue 变量是否在类范围内?

barValue 是一个全局变量,因为您已经在任何函数和类之外定义了它。因此barValue 可以像你一样在类中使用。

问题 2

即使在包含的文件之一中定义了 barValue,也可以接受它吗?

是的,即使barValue 在头文件中定义,它也可以在其他文件中使用,因为/如果它具有外部链接,如下例所示。

文件.h

int barvalue = 34;//barvalue has external linkage

ma​​in.cpp

#include <iostream>
#include "file.h"

int main()
{
    std::cout<<barvalue<<std::endl;//prints 34
    return 0;
}

问题 3

文件和所有包含的文件都可以作为foo类的作用域调用吗?

没有

问题 4

我可以理解,barValue 如果在类体之后定义,则不会被考虑。跟进是否意味着所有包含的文件都在 Class body 之前,并且通常在当前文件内容之前?

您应该进一步澄清这个问题,因为我认为您在这里问什么不清楚,但我会尝试回答我从您的问题中理解的内容。

如果您在类foo 定义之后定义barValue,那么程序将无法运行,因为您在类定义之后定义了它,因此在您编写cout&lt;&lt;barValue&lt;&lt;endl; 时尚未定义/声明它这就是错误的含义,如下所示:

#include <iostream>
using namespace std;


class foo
{
    public:
        void print_bar()
        {
            cout<<barValue<<endl;//error: ‘barValue’ was not declared in this scope
        }
};

int main()
{
    foo f;
    f.print_bar();
    return 0;
}
string barValue="OUTSIDE CLASS";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2022-01-12
    • 2021-01-03
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    相关资源
    最近更新 更多