美文网首页
关于 static、const、static const、con

关于 static、const、static const、con

作者: affyzh | 来源:发表于2020-03-10 16:53 被阅读0次

类里的const成员初始化:

在一个类里建立一个 const 时,不能给他初值。

class Test{
public:
    Test():i(100){}
private:
    const int i=100;//error!!!
};
//或者通过这样的方式来进行初始化
Test::Test():i(100){}

类里的 static 成员初始化:

类中的static 变量是属于类的,不属于某个对象,它在整个程序的运行过程中只有一个副本,因此不能在定义对象时 对变量进行初始化,就是不能用构造函数进行初始化,其正确的初始化方法是:

数据类型 类名::静态数据成员名=值;
class Test{
public:
    Test();
private:
    static int i;
};
 
int Test::i=20;

这表明:

  1. 初始化在类体外进行,而前面不加 static,以免与一般静态变量或对象相混淆
  2. 初始化时不加该成员的访问权限控制符privatepublic
  3. 初始化时使用作用域运算符来表明它所属的类,因此,静态数据成员是类的成员而不是对象的成员。
  4. 类里的 static constconst static 成员初始化

这两种写法的作用一样,为了便于记忆,在此值说明一种通用的初始化方法:

class Test{
public:
    static const int mask1;
    const static int mask2;
};
const Test::mask1=0xffff;
const Test::mask2=0xffff;
//它们的初始化没有区别,虽然一个是静态常量一个是常量静态。静态都将存储在全局变量区域,其实最后结果都一样。可能在不同编译器内,不同处理,但最后结果都一样。

完整实例

#ifdef A_H_
#define A_H_
#include <iostream>
usingnamespace std;
class A{
    public:
        A(int a);
        staticvoid print();//静态成员函数
    private:
        static int aa;//静态数据成员的声明
        staticconst int count;//常量静态数据成员(可以在构造函数中初始化)
        const int bb;//常量数据成员
};
 
int A::aa=0;//静态成员的定义+初始化
const int A::count=25;//静态常量成员定义+初始化
 
A::A(int a):bb(a){//常量成员的初始化
    aa+=1;
}
 
void A::print(){
    cout<<"count="<<count<<endl;
    cout<<"aa="<<aa<<endl;
}
 #endif
 
void main(){
    A a(10);
    A::print();//通过类访问静态成员函数
    a.print();//通过对象访问静态成员函数
}

初始化位置

静态成员不能在类的定义里初始化(除int外)。不能在头文件里初始化。
比如定义了myclass.h,一般放到 myclass.cpp 里初始化它。

参考:https://www.runoob.com/w3cnote/cpp-static-const.html

相关文章

网友评论

      本文标题:关于 static、const、static const、con

      本文链接:https://www.haomeiwen.com/subject/bzqgdhtx.html