C++笔记(十六)——静态类成员和动态类成员

  一、类的静态成员变量

        静态类成员是在类成员定义前使用static关键字标识。在定义静态数据成员时,通常需要类内声明,在类体外部静态数据成员进行初始化对于静态成员来说,不仅可以通过对象访问,还可以直接使用类名访问。

class CNote
{
public:
    static unsigned int m_Price; //在类内声明
};
unsigned int CNote::m_Price = 20;//在类外初始化成员
int main(int argc, char* argv[])
{
    CNote note;
    cout << note.m_Price << "\n";//通过对象访问
    cout << CNote::m_Price << "\n";//通过类名直接访问
    return 0;
}

注:通过对象去使用静态成员是不规范的,应该用“类+成员名”调用的形式

像上面的demo:

在main函数中
{
    CNote::m_y = 20; //静态数据可以通过类名称直接访问(该方法更规范)
    cout << "m_y = " << CNote::m_y << endl;

  return 0;
}

        在一个类中,静态数据成员是被所有的类对象共享的。这就意味着无论定义多少个类对象,类的静态数据成员只有一份,同时,如果某一个对象修改了静态数据成员,其他对象的静态数据成员(实际上是同一个静态数据成员)也将改变。

class CNote
{
public:
    static unsigned int m_Price;
};
unsigned int CNote::m_Price = 20;
int main(int argc, char* argv[])
{
    CNote note;
    CNote vnote;
    note.m_Price = 30;//修改数据后
    cout << note.m_Price << "\n";
    cout << vnote.m_Price << "\n";//它也变了
    return 0;
}

        1. 静态数据成员可以是当前类的类型,而其他数据成员只能是当前类的指针或引用类型

        2. 在定义类的成员函数时,可以为成员函数指定默认参数,其参数的默认值也可以是类的静态数据成员,但是普通的数据成员则不能作为成员函数的默认参数

 

二、类的静态成员函数

        定义类的静态成员函数与定义普通的成员函数类似,只是在成员函数前添加static关键字。静态成员函数既可以用

        1.类的静态成员函数访问类的静态数据成员,而不能访问普通的数据成员

        2. 对于静态成员函数不能定义const成员函数,即静态成员函数末尾不能使用const关键字。

        3. 在定义静态数据成员函数时,如果函数的实现代码处于类体之外,则在函数的实现部分

        类定义以及相关的常数值typedef名通常都存储在头文件中(.h文件),并且头文件以类名来命名。因此,假如我们创建一对头文件:IntArray.h和Matrix.h,则所有打算使用IntArray类或Matrix类的程序就必须包含相关的头文件。

        类似的,不在类定义内部定义类成员函数都存储在与类名同名程序文本文件(.C文件)中。例如,我们将创建一对程序文本文件:IntArray.c和Matrix.c,用来存储相关类的成员函数。

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值