静态数据成员和静态成员函数

1.静态数据成员

(1)静态数据成员不仅可以通过对象访问,还可以直接使用类名进行访问。

class Student

{
    public:

        string name;

        static int age;

};


int main()

{
    Student stu1;

    cout<<Student::age<<stu1.age;//两种方式都可以
}

(2)静态数据成员是被所有的类对象共享的,也就是说无论创建了多少了对象静态数据成员就只有一份,只要有一个对象修改了静态数据成员,其他对象的该成员也会改变。简单的说,就是所有对象都使用这一个数据成员,并不是每个对象单独一个。

class Student

{
    public:

        string name;

        static int age;
};


int main()

{
    Student stu1,stu2;

    stu1.age=20;

    cout<<stu1.age<<stu2.age;//输出的结果相同
}

(3)静态数据成员其类型可以是当前类的类型,而非静态成员是不可以的,除非是指针。

class Student

{
    public:

        string name;

        static int age;

        Student stu1;        //错误

        static Student stu2;  //正确

        Student *stu3;        //正确
}

2、静态成员函数

(1)静态成员函数只能访问类的静态数据成员,不能访问非静态的数据成员。

(2)静态成员函数不能用const关键字修饰。这是由于const实际上适用于修饰this指针的,而静态成员函数时没有this指针的,所以不能用const。

(3)静态成员函数实现和声明,只能有一处标明static。

三、this指针

class Student

{
    public:

        string name;

        static int age;

        int getAge()

        {
            return age;
        }
};


int main()
{
    Student stu1,stu2;

    stu1.age=20;

    stu2.age=30;

    cout<<stu1.getAge()<<stu2.getAge();
}

之所以不同对象调用同一个函数,输出结果相同时因为getAge()中有隐藏的this指针,该函数其真实形式是

int getAge(Student *this)

{
    return this->age;
}

 

 

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值