C++里面双冒号和冒号及点号引用符的用法与区别
一、用双冒号的地方
1.在类外定义函数的时候,要用到void ClassName::FuntionName(pram){}
例如:声明了一个类A,类A里声明了一个函数 void f() ,但是没有在类的声明里给出函数 f () 的定义,那么在类外定义 f ()时,就要写成双冒号,代码如下:
class A //声明一个类,其中有一个函数f()
{
public:
void f();
};
void A :: f()//表示这个函数f()是类A的成员函数,注意这个成员函数的定义可以不在类声明的文件里,具体
//具体看上一篇博文。
{
语句块;
};
2.在定义类的静态变量的时候需要int ClassName::StaticValueName = 10;
静态变量(static).静态变量之所以是因为静态,是因为他在整个程序生命周期的地址静止不变。也就是说在整个程序里面只保存有一份拷贝。static关键字允许它在不同的函数调用间保持它的值。如果一个静态变量被访问后值改变,它就会保持新的值。如果这变量再次被访问,它将会维持最新的值
class A
{
public:
static int i;
private:
};
int A::i = 1; //必须这样初始化
3.利用类调用了静态方法的时候ClassName::StaticFuntionName();
class Account
{
public:
static double m_rate;//静态数据成员,类中声明
static void set_rate(const double& x) {m_rate = x;}
};
double Account::m_rate = 8.0;//静态数据成员在类外初始化
int main()
{
Account::set_rate(5.0);//通过class name调用static函数
Account a;
a.set_rate(7.0);//通过object调用static函数(因为静态成员函数中没有this pointer,才能如此调用)
}
4.在引入命名空间的时候用到using std::vector;
二、用单冒号的地方
1.在类内的public:/private:/protected:
class Account
{
public:
static double m_rate;//静态数据成员,类中声明
static void set_rate(const double& x) {m_rate = x;}
};
2.在参数初始化列表的时候ClassName(pram):ValueName1(),ValueName2(){}
![](https://i-blog.csdnimg.cn/blog_migrate/07ce153269b4c1509fda3ffd0fa08517.png)
3.在派生类的构造函数的书写的时候DerivedClassName(pram):BaseClassName(pram){}
class 派生类名 : 继承方式 基类名
{
派生类的成员
};
继承方式:public、private和protected,默认处理是public。