千家信息网

C++静态成员函数和this指针是怎样的

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章给大家分享的是有关C++静态成员函数和this指针是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。静态成员静态成员就是在成
千家信息网最后更新 2026年11月02日C++静态成员函数和this指针是怎样的

本篇文章给大家分享的是有关C++静态成员函数和this指针是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

    静态成员

    静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员

    静态成员分为:

    1.静态成员变量

     所有对象共享同一份数据 在编译阶段分配内存 类内声明,类外初始化

    示例:

    #includeusing namespace std;class Person{public:   static int m; // 所有对象共享同一份数据};int Person::m = 0;// 类内声明,类外初始化

    2.静态成员函数

    所有对象共享一个函数静态成员函数只能访问静态成员变量
    #includeusing namespace std;class Person{public:   static void func()   {         cout << "static void func调用" << endl;         m_a = 100;//静态成员函数可以访问静态成员变量         //m_b=100,静态成员函数不可以访问非静态成员变量         //原因无法区分到底哪个是对象的m_b;   }   static int m_a;//静态成员变量   int m_b;};int Person::m_a = 0;int main(){   //1.通过对象访问   Person p;   p.func();   //2.通过类名访问   Person::func();   system("pause");   return 0;}

    静态成员函数可以访问静态成员变量

    静态成员函数不可以访问非静态成员变量

    私有权限的静态成员函数,也是访问不到的

    成员变量和成员函数分开存储

    在C++中,类内的成员变量和成员函数分开存储

    只有非静态成员变量才属于类的对象上

    空对象:

    #includeusing namespace std;class Person{};void test01(){        Person p;        //空对象占用内存空间为:1        //C++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占内存的位置        //每个空对象也应该有独一无二的内存地址        cout << sizeof(p) << endl;}int main(){        test01();        return 0;}

    输出结果:1

    #includeusing namespace std;class Person{        int m_a;//非静态成员变量 属于类的对象上};void test02(){        Person p;        cout << sizeof(p) << endl;}int main(){        test02();}

    输出结果:4

    #includeusing namespace std;class Person{        int m_a;//非静态成员变量 属于类的对象上        static int m_b; //静态成员变量 不属于类的对象上};void test02(){        Person p;        cout << sizeof(p) << endl;}int main(){        test02();}

    输出结果:4

    与第二个对比可知:

    静态成员变量 不属于类的对象上

    #includeusing namespace std;class Person{        int m_a;//非静态成员变量 属于类的对象上        static int m_b; //静态成员变量 不属于类的对象上        void func() {}//非静态成员函数 不属于类的对象上        static void func2() {} //静态成员函数也不会属于 类的对象上}; int Person::m_b = 0;void test02(){        Person p;        cout << sizeof(p) << endl;}int main(){        test02();}

    输出结果:4

    结论:只有非静态成员变量才属于类的对象上

    this 指针

    每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码

    那么问题是:这块代码是如何区分是哪个对象调用自己的呢?

    C++通过提供的特殊的对象指针,this指针,解决上述问题,this 指针指向被调用的成员函数所属的对象,通俗的说,谁调用它,this就指向谁

    this 指针是所有成员函数的隐含参数吗,不需要定义,可直接使用

    this 指针的用途

    1.当形参和成员变量同名时,可用this指针来区分2.在类的非静态成员函数中返回对象本身,可用 return  *this

    1.当形参和成员变量同名时,可用this指针来区分

    #includeusing namespace std;class Person{public:        void func(int age)        {                this->age = age;  //        }        int age;};int main(){        Person p;        p.func(18);        cout << p.age << endl;        system("pause");        return 0;}

    2.在类的非静态成员函数中返回对象本身,可用 return *this

    #includeusing namespace std;class Person{public:        Person& func(Person&p)        {                this->age += p.age;                return *this;        }        int age;};int main(){        Person p;        p.age = 10;        //链式编程思想        p.func(p).func(p).func(p);        cout << p.age << endl;        system("pause");        return 0;}

    空指针访问成员函数

    C++中空指针是可以调用成员函数,但是也要注意有没有用到this指针

    如果用到this指针,需要加以判断保证代码的健壮性

    #includeusing namespace std;class Person{public:        void ShowPersonclass()        {                cout << "调用ShowPerclass()函数" << endl;        }};int main(){        Person* p = NULL;        p->ShowPersonclass();        system("pause");        return 0;}

    通过空指针p是可以访问到成员函数(不带this指针的成员函数)

    如下代码就是一个错误代码

    #includeusing namespace std;class Person{public:        void ShowPersonname()        {                cout << m_name << endl;  //此处出现了this指针        }        int m_name;};int main(){        Person* p = NULL;        p->ShowPersonname();        system("pause");        return 0;}

    解析:

    此处出现了this指针

    cout << m_name << endl;

    相当于

    cout < m_name << endl;

    而this指针是一个空指针,所以会报错

    为了增加代码的健壮性,我们因该做出如下改动

    #includeusing namespace std;class Person{public:        void ShowPersonname()        {                if (this == NULL)  //在此判断this是否是空指针                        return;                cout << m_name << endl;        }        int m_name;};int main(){        Person* p = NULL;        p->ShowPersonname();        system("pause");        return 0;}

    以上就是C++静态成员函数和this指针是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

    成员 静态 函数 对象 指针 变量 代码 C++ 内存 结果 输出 就是 健壮 只有 指向 数据 更多 知识 空间 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技有限公司 广州万易互联网科技有限公司 中国互联网科技股 广州互联网科技公司 远拓互联网科技 居家互联网科技有限公司 甘肃拓世互联网科技有限公司 恒生科技互联网指数分析 湖南洣水互联网科技有限公司扣款 西藏七维空间互联网科技有限公司 互联网教育科技公司vipkid 阿里互联网科技公司 昊天互联网科技有限公司 宝灵互联网科技有限公司 厦门千工互联网科技有限公司 湖南一路畅行互联网科技 皮皮虾互联网科技有限公司 城市宝互联网科技有限公司 互联网科技数字货币 35岁以上互联网科技行业 广州百单互联网科技有限公司 互联网科技集团 汉立互联网科技有限公司联系电话 济南和联互联网科技有限公司 佳云科技和互联网广告 无锡工业互联网科技有限公司 国产互联网科技公司 北京互联网科技类企业分布 现代互联网科技公司 知域互联网科技有限公司官网
    0