指定类变量与方法变量C ++

时间:2015-11-06 03:01:01

标签: c++

这是我问题的一个非常基本的例子。

#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 ++中有类似的方法吗?

3 个答案:

答案 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& xtest将&#34;请参阅&#34;所有的变化。

最后,有main运营商。它曾用于从某些范围访问其他范围内的东西。它的格式为::。例如,namespace-or-class::stuff引用名称空间std::cout中的标识符cout。有一个特殊情况:如果没有给出左操作数,std将访问全局范围。每当你“隐藏”时,这都很有用。来自全球范围的东西。例如,在::中,您可以说test,这将引用全局范围内的::x

x

编辑:如果您有点好奇,可以看一看C ++中的课程如何使用它(我不会解释它,因为它已经关闭了-topic)...

void test(int x) {
    // ...
    ::x += 123;
}