静态成员函数

今天一了一段很基础的代码,用到了static 类成员函数,在测试的过程中发现它是可以通过某个对象去访问它的私有数据!

 做一个代码测试:

        CMyThread *pThread = static_cast<CMyThread *>(pParam);
        CTask *pTask =  pThread->m_pTask;//在以前的测试过程中,我知道它(static 成员函数)是
        //不能访问this的非static数据成员,要访问也只能通过传参数进来,进行转化一下
        //例如上面的static_cast或者其他的类型转换符(我在这里只是简单的做了个测试)
        /*
        class A{
        public :
        static void do_a_test(){
        A a;
        std::cout<<a.i<<std::endl;
        }
        private:
        int i;
        };
        *这里我做的测试是:m_pTask 是私有成员,pThread是在this在强制转化后的一个类指针
        *得到这个this指针后,我再去访问这个类的私有成员m_pTask居然是可以通过的(access to private)
        *我在这个基础上我再到外部定义了一个class A,里面有个static 方法,在方法内部定义个
        *临时对象a,再去调用私有数据i,也发现是可以被调用的!(可能这个是我自己的一个语法死角,
        *没有完全了解到的)
        *
        */

        /*
        *总结:
        *(1)普通数据成员属于类的一个具体的对象,只有对象被创建了,普通数据成员才会被分配内存。而静态数据成员属于整个类,即使没有任何对象创建,
        类的静态数据成员变量也存在。
        *(2)因为类的静态数据成员的存在不依赖与于任何类对象的存在,类的静态数据成员应该在代码中被显示的初始化,一定要在类外进行,例如上例。
        *(3)外部访问类的静态成员只能通过类名来访问,例如:test::getCount()。
        *(4)类的静态成员函数无法直接访问普通数据成员(可以通过对象名间接的访问),而类的任何成员函数都可以访问类的静态数据成员。
        *(5)静态成员和类的普通成员一样,也具有public、protected、private3种访问级别,也可以具有返回值、const修饰符等参数。
        *(6)静态成员方法,不能通过去访问非静态的成员数据(by this pointer)
        *(7)在静态成员方法中,虽然它不能之间访问(by this pointer)私有数据,但是它也是类本身的一个成员方法
        可以通过临时对象或者传参数后进行转换来方法它的私有成员方法.

        */


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值