C++中的范围解析算子

在C++中,作用域解析操作符是 :: .它用于以下目的。

null

1) 要在存在同名局部变量时访问全局变量,请执行以下操作:

// C++ program to show that we can access a global variable
// using scope resolution operator :: when there is a local
// variable with same name
#include<iostream>
using namespace std;
int x; // Global x
int main()
{
int x = 10; // Local x
cout << "Value of global x is " << ::x;
cout << "Value of local x is " << x;
return 0;
}


输出:

Value of global x is 0
Value of local x is 10

2) 在类之外定义函数。

// C++ program to show that scope resolution operator :: is used
// to define a function outside a class
#include<iostream>
using namespace std;
class A
{
public :
// Only declaration
void fun();
};
// Definition outside class using ::
void A::fun()
{
cout << "fun() called" ;
}
int main()
{
A a;
a.fun();
return 0;
}


输出:

fun() called

3) 访问类的静态变量。

// C++ program to show that :: can be used to access static
// members when there is a local variable with same name
#include<iostream>
using namespace std;
class Test
{
static int x;
public :
static int y;
// Local parameter 'a' hides class member
// 'a', but we can access it using ::
void func( int x)
{
// We can access class's static variable
// even if there is a local variable
cout << "Value of static x is " << Test::x;
cout << "Value of local x is " << x;
}
};
// In C++, static members must be explicitly defined
// like this
int Test::x = 1;
int Test::y = 2;
int main()
{
Test obj;
int x = 3 ;
obj.func(x);
cout << "Test::y = " << Test::y;
return 0;
}


输出:

Value of static x is 1
Value of local x is 3
Test::y = 2;

4) 如果是多重继承: 如果两个祖先类中存在相同的变量名,我们可以使用范围解析运算符来区分。

// Use of scope resolution operator in multiple inheritance.
#include<iostream>
using namespace std;
class A
{
protected :
int x;
public :
A() { x = 10; }
};
class B
{
protected :
int x;
public :
B() { x = 20; }
};
class C: public A, public B
{
public :
void fun()
{
cout << "A's x is " << A::x;
cout << "B's x is " << B::x;
}
};
int main()
{
C c;
c.fun();
return 0;
}


输出:

A's x is 10
B's x is 20

5) 用于命名空间 如果两个名称空间中存在同名的类,我们可以使用名称空间名称和范围解析运算符来引用该类,而不会产生任何冲突

// Use of scope resolution operator for namespace.
#include<iostream>
int main(){
std::cout << "Hello" << std::endl;
}


Here, cout and endl belong to the std namespace.

6) 在另一个类中引用一个类: 如果一个类存在于另一个类中,我们可以使用嵌套类来使用范围解析操作符引用嵌套类

// Use of scope resolution class inside another class.
#include<iostream>
using namespace std;
class outside
{
public :
int x;
class inside
{
public :
int x;
static int y;
int foo();
};
};
int outside::inside::y = 5;
int main(){
outside A;
outside::inside B;
}


如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享