iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >怎么理解C++类的静态成员变量与静态成员函数
  • 512
分享到

怎么理解C++类的静态成员变量与静态成员函数

2023-06-25 12:06:12 512人浏览 独家记忆
摘要

本篇内容介绍了“怎么理解c++类的静态成员变量与静态成员函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、类的静态成员变量C++类的静态

本篇内容介绍了“怎么理解c++类的静态成员变量与静态成员函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1、类的静态成员变量

C++类的静态成员变量主要有以下特性:

静态成员变量需要类内定义,类外初始化

静态成员变量不依赖于类,静态成员变量属于全局区,不属于类的空间。

静态成员变量通过类名访问,也可以通过对象访问,同一类的不同对象,静态成员共享同一份数据

下面通过代码验证以上三种说法:

#include <iOStream>using namespace std;class Base{public:    static int val1;  //类内定义,类外初始化,如果直接初始化编译器会报错    int val2;private:    static int val3;};int Base::val1(1);  //类外初始化,通过类名访问静态成员int Base::val3(2);  //类外初始化,即便是私有属性也可以通过类名访问静态成员int main(){    Base base1;    Base base2;    base1.val1 = 10;    base2.val1 = 11;    cout << sizeof(Base) <<endl; //类的大小只有四字节,说明静态成员并不依赖类存在,有自己的独立空间     cout << base1.val1 << " " << base2.val1 << endl;       system("pause");    return 0;}

代码运行结果为:

怎么理解C++类的静态成员变量与静态成员函数

通过代码运行结果我们可以确定,Base类的大小只有4字节,说明类静态成员有自己的独立空间,位于静态全局区,且所有对象共享同一份内存,代码修改了base2对象的静态变量val1,base1的val1也输出为11,说明他们共享同一份内存。

那么如果一个类继承了同名的静态变量,会不会共享内存空间呢?下面通过代码验证:

#include <iostream>using namespace std;class Base{public:    static int val1;  //类内定义,类外初始化,如果直接初始化编译器会报错    int val2;private:    static int val3;};int Base::val1(1);  //类外初始化,通过类名访问静态成员int Base::val3(2);  //类外初始化,即便是私有属性也可以通过类名访问静态成员class Son : public Base {public:    static int val1; //类内定义,类外初始化,与父类同名的静态变量};int Son:: val1 = 3; //类外初始化int main(){    Son son1;        cout << son1.val1 << " " << son1.Base::val1 << endl;  //通过对象方式访问静态成员变量    cout << Son::val1 << " " << Base::val1 << endl; //通过类名方式访问静态成员变量    system("pause");    return 0;}

代码运行结果为:

怎么理解C++类的静态成员变量与静态成员函数

通过代码验证,当子类继承父类,且子类和父类含有同名的静态变量,他们并不会共享内存空间,与常量定义一致,而是各自开辟了空间,只不过通过对象访问父类中的静态成员要加上父类的作用域。

2、静态成员函数

类的静态成员函数应该明确以下几点:

函数不占用对象空间,静态成员函数也不占用对象空间

所有对象共享同一个函数

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

静态成员函数也可以通过类名直接访问

静态成员函数有访问权限

下面通过代码验证:

#include <iostream>using namespace std;class Base{public:    static int val1;    int val2;    static void func1(){        //val2 = 10; //静态成员函数访问非静态成员变量,编译会报错        val1 = 10; //只能访问静态成员        cout << "func1()" << endl;    }private:    static void func2(){        cout << "func2()" << endl;    }};int Base::val1(1);int main(){    cout << "Base size = " << sizeof(Base) << endl;    Base base1;    Base base2;    base1.func1(); //通过对象访问    //base1.func2(); //类的私有权限,不能访问    Base::func1(); //通过对象访问   // Base::func2(); //私有权限,不能访问    cout << base1.val1 << " " << base2.val1 << endl;    system("pause");    return 0;}

代码运行结果为:

怎么理解C++类的静态成员变量与静态成员函数

代码运行结果说明,静态成员函数也不占用对象空间,所有对象共享同一个静态成员函数,代码中,base1通过静态成员函数修改的静态成员后。base2对象的静态成员也被修改,其次,.静态成员函数可以通过类名直接访问,静态成员函数有访问权限,都已在代码中说明了。

“怎么理解C++类的静态成员变量与静态成员函数”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么理解C++类的静态成员变量与静态成员函数

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

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

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

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

下载Word文档
猜你喜欢
  • 怎么理解C++类的静态成员变量与静态成员函数
    本篇内容介绍了“怎么理解C++类的静态成员变量与静态成员函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、类的静态成员变量C++类的静态...
    99+
    2023-06-25
  • C++类的静态成员变量与静态成员函数详解
    目录1、类的静态成员变量2、静态成员函数总结1、类的静态成员变量 C++类的静态成员变量主要有以下特性: 1.静态成员变量需要类内定义,类外初始化 2.静态成员变量不依赖于类,静态成...
    99+
    2024-04-02
  • 怎么理解C++的静态成员变量和静态成员函数
    怎么理解C++的静态成员变量和静态成员函数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一.static修饰变量void text() {static&nb...
    99+
    2023-06-22
  • C++的静态成员变量和静态成员函数详解
    目录一.static修饰变量二.static修饰函数三.static在类中使用1.创建与初始化 2.使用问题 3.在public、private下static变量使用 四.class...
    99+
    2024-04-02
  • C++的静态成员变量和静态成员函数你了解多少
    目录静态成员变量静态变量在任何类对象创建前初始化定义静态成员变量使用静态成员变量类对象共享静态成员const constexpr静态成员函数总结静态成员变量 这里先引用Geeksfo...
    99+
    2024-04-02
  • C++类的静态成员变量实例分析
    本文小编为大家详细介绍“C++类的静态成员变量实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++类的静态成员变量实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、成员变量的回顾通过对象名能够访...
    99+
    2023-06-30
  • 如何理解C++类的静态成员
    这期内容当中小编将会给大家带来有关如何理解C++类的静态成员,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。静态数据成员的值对每个对象都是一样,这些对于一些专业的程序员来说进行静态成员函数实现是一件非常头疼...
    99+
    2023-06-17
  • C++分析讲解类的静态成员变量是什么
    目录一、成员变量的回顾二、新的需求三、静态成员变量四、小结一、成员变量的回顾 通过对象名能够访问 public 成员变量每个对象的成员变量都是专属的成员变量不能在对象之间共享 二、新...
    99+
    2024-04-02
  • java静态成员变量怎么赋值
    Java静态成员变量可以通过以下两种方式进行赋值:1. 在静态代码块中赋值:```javapublic class MyClass ...
    99+
    2023-08-23
    java
  • c++静态成员变量的作用是什么
    c++中的静态成员变量是属于类的成员变量,而不是属于类的特定对象。静态成员变量只有一个副本,而不是每个对象都有一个副本。静态成员变量...
    99+
    2024-03-11
    c++
  • C++ 静态函数可以访问非静态成员函数吗?
    在 c++++ 中,静态函数不能直接访问非静态成员函数。解决方法包括:1. 通过对象指针访问;2. 通过类作用域运算符访问。 C++ 中静态函数访问非静态成员函数 在 C++ 中,静态...
    99+
    2024-04-17
    c++ 静态函数 作用域
  • C++中怎么操作静态成员函数
    C++中怎么操作静态成员函数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员,如果C++静态成员函数...
    99+
    2023-06-17
  • C#中静态类和静态类成员的区别是什么
    C#中静态类和静态类成员的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#静态类和静态类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立...
    99+
    2023-06-17
  • C++类的静态成员有哪些
    本篇内容介绍了“C++类的静态成员有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在静态成员函数的实现中不能直接引用类中说明的非静态成员...
    99+
    2023-06-17
  • 静态成员,友元函数,友元类
    🐶博主主页:@ᰔᩚ. 一怀明月ꦿ  ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++ 🔥座右铭:“不要等到什么都没有了,才下定决心去做” ...
    99+
    2023-09-05
    jvm c++ java
  • C++ 静态函数可以访问非静态数据成员吗?
    一般情况下,c++++ 静态函数不能访问非静态数据成员,但可以通过以下例外情况间接访问:指向非静态成员指针:静态函数可以拥有非静态数据成员的指针。接受非静态成员引用的参数:静态函数可以接...
    99+
    2024-04-16
    c++ 静态函数
  • C++中怎么初始化类静态成员
    这篇文章将为大家详细讲解有关C++中怎么初始化类静态成员,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C++类静态成员初始化相关实现代码介绍:class mytestclass&n...
    99+
    2023-06-17
  • 怎样使用C++静态成员
    怎样使用C++静态成员,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在C++中,C++静态成员的提出是为了解决数据共享的问题。实现共享的作用,下面主要讲述的是如...
    99+
    2023-06-17
  • C++静态成员函数和this指针详解
    目录静态成员1.静态成员变量2.静态成员函数成员变量和成员函数分开存储this 指针空指针访问成员函数总结静态成员 静态成员就是在成员变量和成员函数前加上关键字static,称为静态...
    99+
    2024-04-02
  • es6类的静态成员是什么
    本篇内容主要讲解“es6类的静态成员是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“es6类的静态成员是什么”吧!在es6中,由类直接调用的属性和方法叫静态成员。在类里面对变量、函数加sta...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作