这是我问题的一个非常基本的例子。
#include <iostream>
#include <string>
using namespace std;
int x;
void test(int x) {
x += 3;
cout << x << endl;
}
int main() {
test(x);
cout << x << endl;
return 0;
}
输出是: &#34; 3&#34; (新行)&#34; 0&#34;
如何指定&#34; test()&#34;的内部?功能,我想要课程&#39; x&#39;变量有3添加到它而不是函数内的临时变量?
在java中,您指定使用&#39;&#34;&#34;此&#34;来处理函数/方法的变量。在C ++中有类似的方法吗?
答案 0 :(得分:3)
在您的情况下,您可以使用::
指定使用全局变量,
而不是本地的:
void test(int x) {
::x += 3;
cout << ::x << endl;
}
仅仅是全球和本地class member
左右。
答案 1 :(得分:2)
在C ++语言中,创建一个类或结构,您可以在Java语言中使用与this->x
相同的this.x
。
答案 2 :(得分:0)
首先,感谢您声明您来自Java。这将有助于我们很多帮助你!
现在,让我们分析您的代码
#include <iostream>
#include <string>
using namespace std;
使用std
命名空间(不推荐使用BTW)包含一些标题,这里的一切都没问题。
int x;
在全局范围内声明类型为x
的名为int
的变量,初始值为零(这仅适用于全局范围内的对象!)。
void test(int x) {
x += 3;
cout << x << endl;
}
您声明一个函数test
,它接受x
类型的参数int
并返回void
(a.k.a:无)。该函数将其对等x
变量的值递增3,然后通过std::cout
将其打印到标准输出。需要明确的是,一旦你声明了int x
参数,就会隐藏&#34;隐藏&#34;全局范围内的int x
,因此如果您想要访问更晚的版本,则必须使用其他方式(见下文)。
int main() {
test(x);
cout << x << endl;
return 0;
}
您声明了特殊的main
函数,没有参数并返回int
。该函数使用全局test
作为参数调用int x
,然后通过x
将全局std::cout
的值打印到标准输出,最后{{1} } s为零,表示执行成功。
现在,您有一个很大的误解,您可以将其归因于Java语言的单范式设计。在Java中,没有&#34;全局函数&#34;的概念,甚至没有说&#34;函数&#34;一点都不你只有&#34;类&#34;使用&#34;方法&#34;。
在C ++中,情况并非如此。 C ++语言是 multi-paradigm 之一;它允许你做命令式编程,结构化编程,面向对象编程,甚至函数式编程(你不会完全理解最后一句)!当您在未指定范围的情况下声明任何时,它被称为位于全局范围内。可以通过任何,任何地方访问全局范围。在您提供的示例中没有涉及类!
在全球范围内,类似return
的不方法,但功能。没有上课&#34;拥有&#34;那个功能;让我们说出每个人&#34; )。函数只是一个代码块,如果函数有它,你可以通过赋予它参数来重用它们。在C ++中,您使用类将数据和相应的代码封装在一个&#34; packed&#34;黑盒实体,不适用于任何东西,比如Java。
现在,(这有点像Java,但要小心!),当你通过&#34;普通&#34;对象,例如void test(int)
或类似于int
(您不希望理解......)的函数,该函数获取副本那个对象。 std::
中的int x
不与传递给它的test
相同。如果您在main
内分配,则会注意到test
&#34;看不到差异&#34;。在Java中,这也适用于main
等基本类型,但在C ++中它适用于所有类型。
如果您希望能够更改所获得的变量,只需使用引用即可。您可以通过键入int
获得任何类型T
的引用。因此,如果您在现在已修改的T&
内分配int& x
,test
将&#34;请参阅&#34;所有的变化。
最后,有main
运营商。它曾用于从某些范围访问其他范围内的东西。它的格式为::
。例如,namespace-or-class::stuff
引用名称空间std::cout
中的标识符cout
。有一个特殊情况:如果没有给出左操作数,std
将访问全局范围。每当你“隐藏”时,这都很有用。来自全球范围的东西。例如,在::
中,您可以说test
,这将引用全局范围内的::x
!
x
编辑:如果您有点好奇,可以看一看C ++中的课程如何使用它(我不会解释它,因为它已经关闭了-topic)...
void test(int x) {
// ...
::x += 123;
}