只是試圖抓住圍繞 C 中 Class 范圍的概念。如果我們舉一個例子:
#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;
}
我想知道:
- 是
barValue變數在類范圍? - 可以在
barValue即使是在包含檔案的一個定義被接受? - 檔案和所有包含的檔案是否都可以稱為
foo類的范圍? - 我可以理解,
barValue如果它是在 Class body 之后定義的,則不會被考慮。跟進是不是意味著所有包含的檔案都在類主體之前,通常在當前檔案內容之前?
uj5u.com熱心網友回復:
問題 1
barValue 變數是否在類范圍內?
barValue是一個全域變數,因為您已經在任何函式和類之外定義了它。因此barValue可以像您一樣在課堂內使用。
問題2
即使 barValue 是在包含的檔案之一中定義的,它是否可以被接受?
是的,即使barValue在頭檔案中定義,它也可以在其他檔案中使用,因為/如果它具有外部鏈接,如下例所示。
檔案.h
int barvalue = 34;//barvalue has external linkage
主程式
#include <iostream>
#include "file.h"
int main()
{
std::cout<<barvalue<<std::endl;//prints 34
return 0;
}
問題 3
檔案和所有包含的檔案是否可以作為foo類的作用域呼叫?
不
問題 4
我可以理解,
barValue如果它是在類主體之后定義的,則不會被考慮。跟進是不是意味著所有包含的檔案都在類主體之前,通常在當前檔案內容之前?
你應該更多地澄清這個問題,因為我認為不清楚你在這里問的是什么,但我會盡量回答我從你的問題中了解到的。
如果您barValue在類foo定義之后定義,那么程式將無法運行,因為由于您在類定義之后定義了它,因此在您撰寫時尚未定義/宣告cout<<barValue<<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";
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/369843.html
