C++ 在声明对象之后::是什么意思?

C++ 在声明对象之后::是什么意思?,c++,C++,完成后,我正在尝试做一些hello world的事情。我试着做的第一件事是直接在屏幕上画画,没有窗口。我找到了,而且很有效 #include "stdafx.h" #include <Windows.h> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { HDC screenDC = ::GetDC(0); ::Rectangle(screenD

完成后,我正在尝试做一些hello world的事情。我试着做的第一件事是直接在屏幕上画画,没有窗口。我找到了,而且很有效

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    HDC screenDC = ::GetDC(0);
    ::Rectangle(screenDC, 200, 200, 300, 300);

    int exit; cin >> exit;
    return 0;
}
矩形的成员是什么


如果你不介意的话,我还有一些可能很简单的问题。如果没有,就别担心

  • 只要我的矩形上有一个窗口移动,它就会消失。有没有回电话让我知道这件事,以便我可以重新油漆

  • 如何更改矩形的颜色

  • 我可以去哪里了解这些?我找到的每一篇教程都很稀少,而且大部分都已经过时了。如果我需要的话,我可以买本书。尝试过以下方法(有时成功,有时失败):


类似于访问全局命名空间。这是名称空间解析。如果愿意,您可以直接删除那些
,它们是多余的碎屑。

是范围解析操作符

scope::name
表示使用名为
scope
的类或命名空间中声明的名称


::name
表示使用全局命名空间中声明的名称。通常,它是可选的;但有时,如果当前作用域中存在同名的其他内容,则需要它。

是作用域解析运算符<代码>::标识符将引用全局命名空间中的任何内容。然而,这并不总是必要的。只有当不使用它会导致歧义时才真正需要它:

int i = 0;

void func() {
    int i = 0;

    ::i = 1; // This will set the global i
    i = 1; // This will set the local i
}

(注意:我不以任何方式支持globals)

::用于访问类或名称空间中的内容。(在本例中,情况并非如此。)

因此,如果您有一个带有静态方法栏的类Foo,您可以这样调用它
Foo::Bar()

另外,如果您有一个名称空间MyLibrary,其中有一个函数printpresttyThings,您可以这样调用它:
MyLibrary::PrintPrettyThings()

如果你在某处有另一个功能条,并且你在一个Foo方法中,你可以使用它
::Bar()调用FO之外的条,否则您将只调用Fo::Bar。

顺便说一下,C++教程绝不是“标准”。这是范围解析运算符。在这种情况下,
::Rectangle
意味着函数
Rectangle
存在于全局名称空间中。最好使用最上面的全屏彩色键窗口,而不是在屏幕上绘制。使用
CreateSolidBrush
将其选择到DC或其他可以改变颜色的东西中(MSDN上有很多关于GDI的信息),Petzold的书非常棒。请不要添加与原始问题无关的其他问题-为这些项目创建新问题。您可以将它们放到这里;但有时你需要它们来解决歧义。好吧,在这种情况下,你可以放弃它们。但是,如果您当前位于另一个名称空间中,该名称空间中也有相同的名称,那么只写符号名称将是不明确的。具体来说,
是最重要的。@Caleb:是的,我想我应该提到这一点。我假设OP知道它是什么(因为他问“什么是一个成员?”),但完整性很好。
int i = 0;

void func() {
    int i = 0;

    ::i = 1; // This will set the global i
    i = 1; // This will set the local i
}