1.冒号(:)用法
(1)表示位域的定义
位域必须是整型数据类型,可以说是uigned或unsigned 。通过在成员名后面接一个冒号以及指定位数的常量表达式,指出成员是一个位域:
(1)用于实现,说明f 在XX作用域中
例如:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f 的定义,那么在类外定义时,
就要写出void A::f(),说明这个f()函数是类A 的成员函数。
(2)在MFC中使用win32 API函数时,在API函数名前加::,用处是指定使用的是全局函数,即win32API函数 ,不使用MFC提供的函数
(3)用于使用,名字查找在指定作用域中查找,不按名字查找的一般方式查找
比如希望在局部变量的作用域内使用同名的全局变量,必须得在该变量前加上::
(4)用于引用类型成员,静态成员函数,静态数据成员
例如:声明了一个System类,Math类为System的嵌套类,是System的public部分。而Sqrt()是Math类的静态成员函数。
使用Sqrt静态成员函数,就应该这样写System::Math::Sqrt();
(5)私有继承的派生类,基类public和protected部分在其派生类中变为private部分,可以使用using声明来恢复访问权限。
template<typename T>
class Counter {
public:
Counter() { ++count; }
Counter(const Counter&) { ++count; }
~Counter() { --count; }
static size_t howMany()
{ return count; }
private:
static size_t count;
};
template<typename T>
size_t
Counter<T>::count = 0;
class ABCD: private Counter<ABCD> {
public:
// 使howMany成为公共成员
using Counter<ABCD>::howMany;
..... // ABCD的其它部分没有改变
};
class Base
{
public:
virtual void mf1() = 0;
virtual void mf1(int);
virtual void mf2();
void mf3();
void mf3(double);
...
private:
int x;
};
class Derived:public Base{
public:
//让Base class内名为mf1与mf3的所有东西在
//Derived作用域内都可见(并且都是public)
using Base::mf1;
using Base::mf3;
virtual void mf1();
void mf3();
void mf4();
};