c++中静态成员变量和静态成员函数

静态成员变量

在一个类中,若将一个成员变量声明为static,这种成员成为静态成员变量,与一般的数据成员不同,无论建立了多少个对象,都只想有一个静态数据的拷贝,静态成员变量,属于某个类,所有对象共享
静态变量,在编译阶段就分配空间,对象还没有创建时,就已经分配空间

  1. 静态成员变量必须在类内中声明,在类外定义
  2. 静态数据成员不属于某个对象,在为对象分配空间中不包括静态成员所占空间
  3. 静态数据成员可以通过类名或者对象名来引用

静态成员函数

  1. 可以访问静态的成员变量,不可以访问普通的成员变量

  2. 普通成员函数 都可以访问

  3. 静态成员函数也有权限

  4. 可以通过对象访问,也可以通过类名进行访问

      #include<iostream>using namespace std;class Person{public:Person(){//m_Age = 10;}static int m_Age;//加入static 静态成员变量,会共享数据//静态成员变量,类内声明,类外初始化int m_A;//静态成员函数//1.不可以访问  普通的成员变量//2.可以访问	静态成员变量//3.静态成员函数也是有权限的static void func(){//m_A = 10;m_Age = 100;cout << "func调用" << endl;}//普通成员函数,可以访问普通成员变量,也可以访问静态成员变量void myFunc(){m_A = 10;m_Age = 100;}private:static int m_other;//私有权限,类外不能访问static void func2(){cout << "func2调用" << endl;}};int Person::m_other = 0;int Person::m_Age = 0;//类外初始化void test01(){//1.通过对象访问属性Person p1;p1.m_Age = 10;Person p2;p2.m_Age = 20;cout << "p1=" << p1.m_Age << endl;cout << "p2=" << p2.m_Age << endl;//共享数据,都是20,以最近一次赋值为准//2.通过类名访问属性//因为通过类名访问,所以不能在类内初始化cout << "通过类名访问Age" << Person::m_Age << endl;//cout << "other=" << Person::m_other << endl;//私有权限在类外无法访问//静态成员函数调用//不可以访问 普通的成员变量p1.func();p2.func();Person::func();//Person::func2();//静态成员函数设为私有,类外不能访问}int main(){test01();system("pause");return 0;}
    

const静态成员属性

如果一个类的成员,既要实现共享,又要实现不可改变,就用static const 修饰

定义静态const数据成员时,最好在类内部初始化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单列模式(饿汉)

单例模式案例 目的&#xff1a;为了让类中只有一个实例&#xff0c;实例不需要自己释放将 默认构造 和 拷贝构造 私有化内部维护一个 对象的指针私有化唯一指针对外提供getinstance方法来访问这个指针保证类中只能实例化唯一 一个对象 主席案例 #include<iostream>usin…

Makefile札记

Makefile中: ? 的区别 在Makefile中我们经常看到 : ? 这几个赋值运算符&#xff0c;那么他们有什么区别呢&#xff1f;我们来做个简单的实验 新建一个Makefile&#xff0c;内容为&#xff1a; ifdef DEFINE_VRE VRE “Hello World!” else endif ifeq ($(OPT),define) VRE…

c++中this指针基本概念和使用

class Person { public:int m_A;//非静态成员变量&#xff0c;属于对象上void func(/*Person * this*/){}; //非静态成员函数 不属于对象身上static int m_B;//静态成员函数&#xff0c;不属于对象上static void fun2(){};//静态成员函数 &#xff0c;不属于对象身上//double …

通用Makefile实现

Makefile是Linux下程序开发的自动化编译工具&#xff0c;一个好的Makefile应该准确的识别编译目标与源文件的依赖关系&#xff0c;并且有着高效的编译效率&#xff0c;即每次重新make时只需要处理那些修改过的文件即可。Makefile拥有很多复杂的功能&#xff0c;这里不可能也没必…

c++中空指针访问成员函数

如果成员函数没有用到this &#xff0c;那么空指针可以直接访问 如果成员函数用到this 指针&#xff0c;就要注意&#xff0c;要判断是否为空&#xff0c;防止程序崩溃 #include<iostream>using namespace std;class Person{public:void show(){//没有 用到this指针&am…

从0开始python学习-35.allure报告企业定制

目录 1. 搭建allure环境 2. 生成报告 3. logo定制 4. 企业级报告内容或层级定制 5. allure局域网查看 1. 搭建allure环境 1.1 JDK&#xff0c;使用PyCharm 找到pycharm安装目录找到java.exe记下jbr目录的完整路径&#xff0c;eg: C:\Program Files\JetBrains\PyCharm Com…

grep 常用命令

这个--include选项,可以这样使用: grep -rn --include*.c --include*.h re . 可以指定多次, 如果真是上面的这种情况, 其实可以用 grep -rn --include*.[ch] re . 但是, 如果源文件中含有C源代码,上面的方法就不凑效了, 因为[]中只能放一个字符. grep -rn --include*.{cp…

c++中友元函数详解

友元 友元分为&#xff1a;友元函数和友元类 友元提供了一种突破封装的方式&#xff0c;有时提供了便利。但是友元会增加耦合度&#xff0c;破坏了封装&#xff0c;所以友元不宜多 用。 全局函数做友元函数 全局函数写到类中做声明 并且最前面写关键字 friend 友元函数可访问…

Linux时间函数札记

关于gmtime、gmtime_r、localtime、localtime_r 测试环境&#xff1a;vmware 7 Redhat5.5&#xff0c;系统时间使用UTC&#xff0c;时区为上海。 1、函数功能介绍 使用man gmtime或man localtime都可以的得到这几个函数的介绍。原型如下&#xff1a; struct tm *gmtime(const …

c++实现顺序表的相关操作

Myarray.h文件 #pragma once#include<iostream>using namespace std;class MyArray { public:MyArray();//默认构造 默认100容量MyArray(int capacity);MyArray(const MyArray& array);~MyArray();//尾插法void Push_Back(int val);//根据索引获取值int getData(int…

系统架构札记

什么是高内聚、低耦合&#xff1f; 起因&#xff1a;模块独立性指每个模块只完成系统要求的独立子功能&#xff0c;并且与其他模块的联系最少且接口简单&#xff0c;两个定性的度量标准――耦合性和内聚性。 耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一…

c++中运算符重载(加号运算,左移运算,前置后置++运算符,赋值运算,关系运算,函数运算)

运算符重载注意 重载的运算符要易读内置的数据类型的表达式的运算符是不可以改变的不要重载&& 和 | | 运算符&#xff0c;[]和->运算符只能通过成员函数进行重载<<和>>只能通过全局函数配合友元函数进行重载 加号运算符重载 如果想让自定义数据类型 进…

linux fstab解读

fstab这个文件挺有用的。 从左到右&#xff1a; /dev/device mount-point type rules dump fsck 1. /dev/device: 不用说了吧&#xff1f;例如&#xff0c;/dev/hda1为M$-Win9x下的c:盘。 2. mount-point: 挂载点。例如&#xff0c;把/dev/hda1挂到/mnt/mywinc下。 3. type: ex…

c++实现字符串类的封装

MyString.h文件 #define _CRT_SECURE_NO_WARNINGS#pragma once#include<iostream>#include<string>using namespace std;class MyString{friend ostream & operator<<(ostream & cout, MyString & str);friend istream & operator>>(…

c++中的继承--1(引出,继承方式,继承的对象模型)

继承的引出 概念&#xff1a; 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特 性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序设计的层次结构…

Makefile经典教程(掌握这些足够)

makefile很重要 什么是makefile&#xff1f;或许很多Winodws的程序员都不知道这个东西&#xff0c;因为那些Windows的IDE都为你做了这个工作&#xff0c;但我觉得要作一个好的和professional的程序员&#xff0c;makefile还是要懂。这就好像现在有这么多的HTML的编辑器&#xf…

c++中的继承--2(继承中的析构函数和构造函数,继承中同名成员,继承中静态成员)

继承中的构造函数和析构函数 继承中的构造和析构顺序 子类创建对象时&#xff0c;先调用父类的构造&#xff0c;然后调用自身构造析构顺序与构造顺序相反子类不会继承父类的构造函数和析构函数如果父类中没有合适默认构造&#xff0c;那么子类可以利用初始化列表的方式显示的…

Linux锁机制和线程安全

锁机制是多线程编程中最常用的同步机制&#xff0c;用来对多线程间共享的临界区进行保护。 1. 互斥锁&#xff1a;pthread_mutex&#xff0c;属于sleep-waiting类型的锁 pthread_mutex_t *mutex; int pthread_mutex_int(mutex, attr) //以动态方式创建互斥锁&#xff0c;参…

c++中的继承--3(多继承问题,菱形继承)

继承中的多继承 #include<iostream>using namespace std;class Base1 { public:Base1(){m_A 10;} public:int m_A;};class Base2 { public:Base2(){m_A 10;} public:int m_B;int m_A;};class Son :public Base1, public Base2 {public:int m_C;int m_D; };void test01…

c++中的多态---1(多态概念,静态联编和动态联编,多态原理解析,重载,重写,重定义的对比)

多态的基本概念 多态是面向对象设计语言数据抽象和继承之外的第三个基本特征多态性(polymorphism)提供接口与具体实现之间的另一层隔膜&#xff0c;从而将“what”和“how”分离开来&#xff0c;多态性改善了代码的可读和组织性&#xff0c;同时也使创建的程序具有可扩展性&am…