浅谈C++中类的const成员变量,static成员变量和const static成员变量的区别

来源:互联网 发布:淘宝卖家如何拉黑买家 编辑:程序博客网 时间:2024/05/02 00:26

1. const成员变量


1. const成员变量需要在实例化类对象时由构造函数进行初始化。

推荐做法是在构造函数中的初始化列表进行初始化,这一点是和引用类型的成员是一致的。

2. 因为是const类型,一旦类对象构造完成,const成员即不可修改。

3. 因为是成员变量,所有类外不具有访问权限。


class Student{public:Student(const std::string& name, int age): m_name(name), m_age(age){}~Student(){}private:const std::string m_name;int m_age;};

这是推荐的构造函数书写方式。


2.static成员变量


1. static成员变量虽叫成员变量,但它非类对象所有,而属于类所有。该类所有对象对它都具有访问权限

(前提条件:必须将其声明为public,当然,既然是共有,也应该将其声明为public)。

2. 它在类对象生成前就已经构造完成。可以对其进行修改。

3. static成员变量的初始化(或者叫赋值)需要放在类外进行。

4. 如果类声明放在.h文件中,那么static成员变量的初始化需要放在.cpp中。


class Student{public:    Student(const std::string& name, int age)    : m_name(name), m_age(age)    {        ++m_stuCnt;    }    ~Student(){}public:    static int m_stuCnt; // 声明private:    const std::string m_name;    int m_age;};// 初始化int Student::m_stuCnt = 0; // 无需加static关键字

对于static成员变量的访问方式有以下二种:

类名::static变量名(强烈推荐)

对象名.static变量名


3.static const(const static)成员函数


1. static const和const static顺序不一样,效果一样。

2. static const成员变量属于类所有,所有类成员都其都具有访问权限。同static成员变量

3. static const成员变量一旦赋值后,其值不可修改。

4. static const int类型成员变量可以在类中进行赋值,也可在类外赋值。

(对于static const推荐在类型进行赋值)


补充:除了static const int类型成员变量可以在类中直接赋值,

double、float、long等静态常量成员都可以在类中进行赋值。

详细内容可以参考

STL源码剖析 1.9.3节 ”静态常量整数成员在class内部直接初始化“


class Student{public:    Student(const std::string& name, int age)    : m_name(name), m_age(age)    {        ++m_stuCnt;    }    ~Student(){}public:    static int m_stuCnt; // 声明    static const int m_maxStuCnt = 50; // 方法1private:    const std::string m_name;    int m_age;};// 初始化int Student::m_stuCnt = 0; // 无需加static关键字


<pre name="code" class="cpp">class Student{public:    Student(const std::string& name, int age)    : m_name(name), m_age(age)    {        ++m_stuCnt;    }    ~Student(){}public:    static int m_stuCnt; // 声明    static const int m_maxStuCnt; // 方法2private:    const std::string m_name;    int m_age;};// 初始化int Student::m_stuCnt = 0; // 无需加static关键字int const Student::m_maxStuCnt = 50; // 方法2 必须加const关键字(const在int前也行)





0 0
原创粉丝点击