iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++静态成员函数和this指针是怎样的
  • 789
分享到

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

2023-06-22 07:06:46 789人浏览 八月长安
摘要

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

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

    静态成员

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

    静态成员分为:

    1.静态成员变量

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

    示例:

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

    2.静态成员函数

    所有对象共享一个函数静态成员函数只能访问静态成员变量
    #include<iostream>using 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++中,类内的成员变量和成员函数分开存储

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

    空对象:

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

    输出结果:1

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

    输出结果:4

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

    输出结果:4

    与第二个对比可知:

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

    #include<iostream>using 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

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

    #include<iostream>using 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;}

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

    #include<iostream>using 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指针,需要加以判断保证代码的健壮性

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

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

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

    #include<iostream>using 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 <<this -> m_name << endl;

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

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

    #include<iostream>using 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指针是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网其他教程频道。

    --结束END--

    本文标题: C++静态成员函数和this指针是怎样的

    本文链接: https://www.lsjlt.com/news/303106.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • C++静态成员函数和this指针是怎样的
      本篇文章给大家分享的是有关C++静态成员函数和this指针是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。静态成员静态成员就是在成员变量和成员函数前加上关键字static...
      99+
      2023-06-22
    • C++静态成员函数和this指针详解
      目录静态成员1.静态成员变量2.静态成员函数成员变量和成员函数分开存储this 指针空指针访问成员函数总结静态成员 静态成员就是在成员变量和成员函数前加上关键字static,称为静态...
      99+
      2024-04-02
    • C++函数指针+对象指针+this指针+指向类静态和非静态成员的指针
      目录1、指向函数的指针2、对象指针3、this指针4、指向类的非静态成员的指针5、指向类的静态成员的指针 1、指向函数的指针 函数的代码在内存中的首地址,是由函数名表示的,也就是说函...
      99+
      2024-04-02
    • C++函数指针,对象指针,this指针,指向类静态怎么用
      这篇文章主要介绍了C++函数指针,对象指针,this指针,指向类静态怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++函数指针,对象指针,this指针,指向类静态怎么用文章都会有所收获,下面我们一起来看...
      99+
      2023-06-29
    • C++的静态成员变量和静态成员函数详解
      目录一.static修饰变量二.static修饰函数三.static在类中使用1.创建与初始化 2.使用问题 3.在public、private下static变量使用 四.class...
      99+
      2024-04-02
    • 怎么理解C++的静态成员变量和静态成员函数
      怎么理解C++的静态成员变量和静态成员函数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一.static修饰变量void text() {static&nb...
      99+
      2023-06-22
    • C++的静态成员变量和静态成员函数你了解多少
      目录静态成员变量静态变量在任何类对象创建前初始化定义静态成员变量使用静态成员变量类对象共享静态成员const constexpr静态成员函数总结静态成员变量 这里先引用Geeksfo...
      99+
      2024-04-02
    • C++类的静态成员变量与静态成员函数详解
      目录1、类的静态成员变量2、静态成员函数总结1、类的静态成员变量 C++类的静态成员变量主要有以下特性: 1.静态成员变量需要类内定义,类外初始化 2.静态成员变量不依赖于类,静态成...
      99+
      2024-04-02
    • 怎样使用C++静态成员
      怎样使用C++静态成员,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在C++中,C++静态成员的提出是为了解决数据共享的问题。实现共享的作用,下面主要讲述的是如...
      99+
      2023-06-17
    • 怎么理解C++类的静态成员变量与静态成员函数
      本篇内容介绍了“怎么理解C++类的静态成员变量与静态成员函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、类的静态成员变量C++类的静态...
      99+
      2023-06-25
    • C++ 静态函数可以访问非静态成员函数吗?
      在 c++++ 中,静态函数不能直接访问非静态成员函数。解决方法包括:1. 通过对象指针访问;2. 通过类作用域运算符访问。 C++ 中静态函数访问非静态成员函数 在 C++ 中,静态...
      99+
      2024-04-17
      c++ 静态函数 作用域
    • C++中怎么操作静态成员函数
      C++中怎么操作静态成员函数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员,如果C++静态成员函数...
      99+
      2023-06-17
    • C++指针怎么调用类成员函数
      本篇内容介绍了“C++指针怎么调用类成员函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在编程工作中常会遇到在一个“类”中通过函数指针调用...
      99+
      2023-06-17
    • C++ 静态函数可以访问非静态数据成员吗?
      一般情况下,c++++ 静态函数不能访问非静态数据成员,但可以通过以下例外情况间接访问:指向非静态成员指针:静态函数可以拥有非静态数据成员的指针。接受非静态成员引用的参数:静态函数可以接...
      99+
      2024-04-16
      c++ 静态函数
    • C#中静态类和静态类成员的区别是什么
      C#中静态类和静态类成员的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#静态类和静态类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立...
      99+
      2023-06-17
    • C++中如何使用成员函数指针
      C++中如何使用成员函数指针,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一个成员函数的指针指向类中的一个成员函数,并和以前有相同的参数,声明如下:float (...
      99+
      2023-06-17
    • C++的static静态成员是什么
      今天小编给大家分享一下C++的static静态成员是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、静态成员即在定义前...
      99+
      2023-06-29
    • 处理C++静态成员时的注意事项是怎样的
      本篇文章给大家分享的是有关处理C++静态成员时的注意事项是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C++静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,...
      99+
      2023-06-17
    • C++中的静态数据成员怎么使用
      这篇文章主要讲解了“C++中的静态数据成员怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中的静态数据成员怎么使用”吧!在C++这个开发环境中,对静态成员函数和静态数据成员一样,...
      99+
      2023-06-17
    • c++函数名指针和函数指针怎么定义
      本文小编为大家详细介绍“c++函数名指针和函数指针怎么定义”,内容详细,步骤清晰,细节处理妥当,希望这篇“c++函数名指针和函数指针怎么定义”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言我们先来看一下函数指针...
      99+
      2023-06-29
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作