赞
踩
C++中通过“::”符号来区分变量等的作用域。::作用域包括三种:全局作用域符,类作用域符,命名空间作用域符
命名空间
“::”是作用域限定符或者称作用域运算符或者作用域操作符(scope operator),例如命名空间。
“::”作用:namespace::name
:: 的另一种用法
直接用在全局函数前,表示是全局函数。当类的成员函数跟类外的一个全局函数同名时,在类内定义的时候,用此函数名默认调用的是本身的成员函数;如果要调用同名的全局函数时,就必须打上::以示区别。
#include <stdio.h> namespace First { int i = 0; } namespace Second { int i = 1; namespace Internal { struct P { int x; int y; }; } } int main() { using namespace First; using Second::Internal::P; printf("First::i = %d\n", i); printf("Second::i = %d\n", Second::i); P p = {2, 3}; printf("p.x = %d\n", p.x); printf("p.y = %d\n", p.y); return 0; }
类作用域符号
类作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++为了避免不同的类有名称相同的成员而采用作用域的方式进行区分。
例如A,B表示两个类,在A,B中都有成员member,那么
A::member就表示类A中的成员member
B::member就表示类B中的成员member
#ifndef _INTARRAY_H_ #define _INTARRAY_H_ class IntArray { private: int m_length; int* m_pointer; public: IntArray(int len); int length(); bool get(int index, int& value); bool set(int index ,int value); void free(); }; #endif
#include "IntArray.h" IntArray::IntArray(int len) { m_pointer = new int[len]; for(int i=0; i<len; i++) { m_pointer[i] = 0; } m_length = len; } int IntArray::length() { return m_length; } bool IntArray::get(int index, int& value) { bool ret = (0 <= index) && (index < length()); if( ret ) { value = m_pointer[index]; } return ret; } bool IntArray::set(int index, int value) { bool ret = (0 <= index) && (index < length()); if( ret ) { m_pointer[index] = value; } return ret; } void IntArray::free() { delete[]m_pointer; }
全局作用
全局作用域符号:当全局变量与局部函数中的变量名一样时,就可以通过::来区分如究竟是哪一个变量:
int i ; //全局变量
void function()
{
int i; //局部变量
i(局部变量) = i(局部变量) *i(局部变量) ;
::i(全局变量) =::i(全局变量) *i(局部变量);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。