首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )

一、静态成员函数简介 1、静态成员函数概念 静态成员函数归属 : C++ 类 , 静态成员函数 是一种 特殊的函数 , 该函数属于类 , 而不是属于 类实例对象 ; 静态成员函数调用不依赖于对象...调用 静态成员函数 s.fun(); 4、静态成员函数只能访问静态成员 静态成员函数内容要求 : 静态成员函数 只能访问 静态成员变量 其他静态成员函数 静态成员函数 不能访问静态成员变量 或 非静态成员函数..., 普通的 成员变量 和 成员函数 , 需要 通过 类 的 实例对象 来访问 , 需要 依托于 对象才能存在 , 而 静态成员函数 可以 不创建 实例对象的前提下被调用 , 因此 静态成员函数 不能访问...进行的 ; Student 类定义静态成员函数 , 使用 static 关键字修饰函数 ; 注意 : 不要在 静态函数 访问静态成员 , 否则会报错 " 对非静态成员“Student::m_age...; // 函数为 类 静态成员变量 赋值 Student::number = 2; // 创建 Student 类型对象 Student s(10, 150); // 使用 对象 访问

30820
您找到你想要的搜索结果了吗?
是的
没有找到

【C++】继承 ⑩ ( 继承机制的 static 静态成员 | 子类访问父类静态成员的方法 )

派生类 ) 共享 ; 2、父类静态成员访问控制权限的改变 继承自 父类的 静态成员变量 , 仍然遵循 继承 子类的 访问控制特性 , public 公有继承 : 父类成员 子类 , 访问控制权限...不变 , 共有 和 保护成员 可以子类访问 , 私有成员不可在子类访问 ; 父类的 public 成员 仍然是 public 成员 ; 父类的 protected 成员 仍然是 protected...成员 ; 父类的 private 成员 仍然是 private 成员 ; protected 保护继承 : 父类成员 子类 , 访问控制权限 变为 protected , 基类的 公有成员...和 保护成员 可以子类访问 , 私有成员不可在子类访问 ; 父类的 public 成员 变为 子类的 protected 成员 ; 父类的 protected 成员 仍然是 protected...成员 ; 父类的 private 成员 仍然是 private 成员 ; private 私有继承 : 父类成员 子类 , 所有成员访问控制权限 变为 private , 基类的 所有成员

34010

静态成员PHP是怎么继承的?

静态成员PHP是怎么继承的? 静态成员,也就是用static修饰的变量或者方法,如果搞不清楚它们实现的原理,就很容易会出现一些错误。这次我们来研究的是继承静态成员的调用情况。...; } $b = new B; $b->show(); 之前的文章,我们有说过self的问题。self仅仅只是指向当前这个类。注意,是类,不是实例化后的对象。...好了,有了这个基础之后,我们知道静态成员是和类有关的,和对象无关。那么以下的代码也就更容易理解了。...$c是静态变量,$d是普通变量。通过类实例的add()方法进行操作后,$c因为是和类有关,所以不管是哪个实例对象,操作它之后都会是共享的。而$d作为普通变量,它的作用域仅限制在当前这个实例对象。...详情可以查看之前的文章PHP的Static 测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/201912/source/%E9%

1.4K20

c++对象和类的关系_类的对象只能访问该类的私有成员

: 访问修饰符:就是用来设置控制封装的这个目标的权限范围,就是可以让那些对象可以去访问这些类 权限范围:这个目标可以被哪些对象什么地方可以访问到这个目标的数据 2.访问修饰符的类型以及各个的含义...所有类或成员,任何代码均可访问该项,访问权限最大也就意味着最不安全 Private访问修饰符:范围:私有的,只有类的内部可以进行访问,允许一个类将其成员变量和成员函数对其他的函数和对象进行隐藏。...只有同一个类的函数可以访问它的私有成员。即使是类的实例也不能访问它的私有成员。...类和内嵌类的成员,只有派生类可以访问该项; Internal访问修饰符:范围:内部的,默认的,程序集内部可以访问,允许一个类将其成员变量和成员函数暴露给当前程序的其他函数和对象。...换句话说,带有internal访问修饰符的任何成员可以被定义成员所定义的应用程序内的任何类或方法访问

1.6K10

为什么Java类的成员变量不能被重写?成员变量Java能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域的方法

这篇文章讨论了Java面向对象概念中一个基本的概念--Field Hiding(成员变量隐藏) 成员变量Java能够被重写么?...不会重写成员变量,而是隐藏成员变量 Java文档对隐藏域的定义: Within a class, a field that has the same name as a field in the superclass...意思就是: 一个类,子类成员变量如果和父类成员变量同名,那么即使他们类型不一样,只要名字一样。父类成员变量都会被隐藏。子类,父类的成员变量不能被简单的用引用来访问。...其实,简单来说,就是子类不会去重写覆盖父类的成员变量,所以成员变量的访问不能像方法一样使用多态去访问。...访问隐藏域的方法 就是使用父类的引用类型,那么就可以访问到隐藏域,就像我们例子的代码 就是使用类型转换System.out.println(((Super)c1).s); 翻译自http://www.programcreek.com

3.5K40

C#7.3 新增功能

1.3 stackalloc 数组支持初始值设定 当你对数组的元素的值进行初始值设定时,你已能够指定该值: var arr = new int[3] {1, 2, 3}; var arr2 = new...2.4 扩展初始值设定的表达式变量 已对 C# 7.0 添加的允许 out 变量声明的语法进行了扩展,以包含字段初始值设定、属性初始值设定、构造函数初始值设定和查询子句。...此版本添加了三个新规则,以帮助编译器选取明显的选择: 当方法组同时包含实例和静态成员时,如果方法不含实例接收器或上下文的情况下被调用,则编译器将丢弃实例成员。...如果方法含有实例接收器的情况下被调用,则编译器将丢弃静态成员没有接收器时,编译器将仅添加静态上下文中的静态成员,否则,将同时添加静态成员和实例成员。...静态上下文(其中隐式 this 实例接收器无法使用)包含未定义 this 的成员的正文(例如,静态成员),以及不能使用 this 的位置(例如,字段初始值设定和构造函数初始值设定)。

1.6K10

C#6.0 新增功能

属性只能在构造函数的主体设置; 尝试另一种普通方法设置 LastName 会生成 CS0200 编译错误: ?...02 自动属性初始化表达式 自动属性初始值设定可让你在属性声明声明自动属性的初始值。...10 使用索引器初始化关联集合 索引初始值设定是提高集合初始值设定与索引用途一致性的两个功能之一。...早期版本的 C# ,可以将集合初始值设定用于序列样式集合,包括键值对周围添加括号而得到 Dictionary: private Dictionary<int, string...11 集合初始值设定的扩展 Add 方法 使集合初始化更容易的另一个功能是对 Add 方法使用扩展方法。 添加此功能的目的是进行 Visual Basic 的奇偶校验。

1.7K20

“类的成员”与“类的主体”

(构造器、静态初始化块、实例初始化块不继承) 解析说构造器、静态初始化块、实例初始化块不算类的成员,所以不会被继承, 这个时候就有问题了:按照常理来说,构造器、静态初始化块、实例初始化块也是构成类的部分之一...,只能去看英文官方文档了; 果不其然,官方文档中找到了答案解析的那段话: Members of a class that are declared private are not inherited...至此就可以很明确了,java文档规定的类的成员并不包括构造器、静态初始化块、实例初始化块; 那么,既然它们三个不属于类的成员,到底属于什么呢?...从这里就可以很明显的看出来了: 类的主体包含类的声明,即字段、方法、类和接口; 类主体还可以包含类的实例初始值设定静态初始值设定和构造函数声明。...也就是说Java规定的类的成员​是属性(Field)和方法(Method); 而大家常说的,我们中文理解的类的成员,其实在Java文档的定义的是类的主体 ​ Java文档: https://docs.oracle.com

71840

C#构造函数的作用_以下程序段的作用是inta

; (4)创建一个类的新对象(使用new关键字)时,系统会自动调用给类的构造函数初始化新对象; C#的类有两种构造函数:实例构造函数和静态构造函数 实例构造函数:负责初始化类的实例变量,...静态构造函数: (1)用于对静态字段、只读字段等的初始化;        (2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的;     (3)...类的静态构造函数在给定应用程序域中至多执行一次,只有创建类的实例或者引用类的任何静态成员才激发,不能带又参数; (4)静态构造函数是不可继承的,而且不能被直接调用;       (5)...如果类包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行.任何带有初始值设定静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定; ...(6)如果没有编写静态构造函数,而这时类包含带有初始值设定静态字段,那么编译器会自动生成默认的静态构造函数; 一个类可以同时拥有实例构造函数和静态构造函数,这是惟一可以具有相同参数列表的同名方法共存的情况

64810

C++类的静态数据成员静态成员函数

类定义的时候非静态数据成员是不分配内存的,只有创建类对象的时候才分配内存,但静态数据成员是要分配内存的,因为它是属于类的,只有一块内存,所以要初始化它,而且不能在类的声明初始化,必须要在类外初始化...静态数据成员访问受类的访问权限控制。如果定义为私有,则可以类内访问到。...静态成员函数 一般都是静态成员函数修改静态数据成员刚刚的手机类声明成员函数: static void change(); 就是静态成员函数。...我们给它来一个类外定义: void redmik30pro::change() { battery-=10; } 要注意的是,静态成员函数只能访问静态数据成员静态成员函数,不能访问静态数据成员,如果要访问静态数据成员...但是非静态成员函数可以任意地访问静态成员函数和静态数据成员。 那静态成员函数存在的意义是什么?

15830

C#基础知识系列五(构造函数)

实例构造函数 使用 new 表达式创建某个类的对象时,会使用实例构造函数创建和初始化所有实例成员变量。 要初始化静态类或非静态静态变量,必须定义静态构造函数。...类构造函数可通过初始值设定来调用基类的构造函数,如下所示: abstract class Shape { public const double pi = Math.PI; protected...创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。...创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。 无法直接调用静态构造函数。 程序,用户无法控制何时执行静态构造函数。...静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件写入

88930

C#3.0新增功能06 对象和集合初始值设定

使用 C# 可以单条语句中实例化对象或集合并执行成员分配。 对象初始值设定 使用对象初始值设定,你可以创建对象时向对象的任何可访问字段或属性分配值,而无需调用后跟赋值语句行的构造函数。...0.0, [1, 1] = 1.0, [1, 2] = 0.0, [2, 0] = 0.0, [2, 1] = 0.0, [2, 2] = 1.0, }; 包含可访问资源库的任何可访问索引器都可以用作对象初始值设定的表达式之一...尽管对象初始值设定可用于任何上下文中,但它们 LINQ 查询表达式特别有用。...查询表达式常使用只能通过使用对象初始值设定进行初始化的匿名类型,如下面的声明所示。...请注意,各个对象初始值设定分别括大括号且用逗号隔开。

86410

C#经典面试题及答案 (3)

(1)用于对静态字段、只读字段等的初始化。 (2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。...(3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数 (4)静态构造函数是不可继承的,而且不能被直接调用。...任何带有初始值设定静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定。...(6)如果没有编写静态构造函数,而这时类包含带有初始值设定静态字段,那么编译器会自动生成默认的静态构造函数。...有一点要记住,Sql     Server时间是精确到3毫秒。这就是为什么我需要减去3毫秒来获得我要的日期和时间。

73520

C# static

(2)、内存的初始化 a、静态成员第一次使用时初始化,非静态成员创建成员的时候厨初始化 b、静态构造函数只能被执行一次;非静态的构造函数可以根据需要进行多次使用。...它们最主要的区别是:静态成员成员第一次初始化后,就给静态成员在内存中分配了地址,且这个地址只有一份,故static可以直接访问,而非静态成员必需手工去实例化该类,以对象的方式去访问变量和方法。...(3)、静态成员的释放 a、静态成员一旦创建则在全局区一直存在,直到应用程序结束。 b、非静态成员则是由new关键字创建,可以有多个副本,其释放由GC(垃圾自动回收)完成。...h、如果没有写静态构造函数,而类包含带有初始值设定静态成员,那么编译器会自动生成默认的静态构造函数。 i、静态构造函数不能有非静态成员,因为 ?...,而是属于这个类的对象,所以没有实例化对象之前,是找不到非静态成员的,所以静态方法或者构造函数中使用非静态成员必须这样:new 类名().非静态成员=值; j、静态构造函数是最早被调用的,只要有静态访问

85050

如果一个函数概念上属于这个类,但是不定义为类的成员函数,一般将这个类定义类声明的头文件 访问控制与封装 一般来说定义类的时候应该将类的数据成员定义为私有或者保护类型,通过成员函数来访问类的数据成员...只用调用类方法就好了,不用关注该如何设置数据成员 到此为止,书中提到了两种访问权限,public和private: public: 后定义的成员可以整个程序内被访问 private: 后定义的成员只能在类的成员函数中被访问...,可以使用初始值列表的形式 某些场合下初始值列表必不可少:初始化const成员或者引用成员 构造函数初始值列表只说明用于初始化成员的值,而不限定初始化的具体执行顺序 成员的初始化顺序与他们定义的顺序一致...它们不包含this指针,静态函数成员不能被声明成const类型,也不能在静态函数成员调用非类的静态成员 不能在类的内部初始化类的静态成员,static关键字只能出现在类内部声明语句中,定义的时候不能加...static关键字 针对constexpr类型的static成员,可以类内定义类内初始值 由于静态数据成员不与类绑定,所以计算类大小的时候可以不用考虑静态成员

58710

C#要点

3.8 静态类和静态成员 1)静态类是密封的,因此不可被继承。 2)静态类不能包含实例构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。 3)静态方法和属性只能访问静态字段和静态事件。...4)静态成员第一次被访问之前并且在任何静态构造函数(如调用的话)之前初始化。 5)静态构造函数有以下特点: l 静态构造函数既没有访问修饰符,也没有参数。...l 创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。 l 无法直接调用静态构造函数。 l 程序,用户无法控制何时执行静态构造函数。...3.9 可访问性 非嵌套类型:不嵌套在其他类型的顶级类型的可访问只能是 internal 或 public。 这些类型的默认可访问性是 internal。...interface public 无 struct private public internal private 注: 1)访问修饰符internal:只有同一程序集的文件,内部类型或成员才是可访问

1.1K50

java的类

基本属性——变量 基本功能—–方法 变量–是用来描述事物的基本属性 方法–是用来描述事物的基本功能 4.4.Java类变量的分类及其基本特征?...(3).可以本类的任意一个方法中被使用 2.局部变量———————–方法里/方法参数 (1).不能使用访问限制修饰符。 (2).必须设置初始值 (3).只能在本方法中使用。...同一个类成员变量与某一个方法的局部变量的名称相同,这是我们方法中使用这个成员变量的时候,得到的结果是局部变量的值,此时就是方法的局部变量将类成员变量的值隐藏了,这就是成员变量的隐藏。...静态成员变量与实例变量—-都是成员变量【全局变量】 成员变量【全局变量】—类中方法外 (1).可以使用访问限制修饰符,也可以不使用。...(3).可以本类的任意一个方法中被使用 成员变量【全局变量】可以分为2种 按照成员变量【全局变量】是否使用static关键字 静态成员变量【类变量】—使用static关键字修饰的成员变量

1.2K30

第7章 类

友元声明只能出现在类定义的内部,但是类内出现具体位置不限,不过最好还是类定义开始前集中声明友元。 友元不是类的成员,也不受它所在的区域访问控制级别的约束。...---- 7.3 类的其他特性 ,除了定义数据和函数成员之外,还可以自定义某种类型的别名,也存在访问权限。用来定义类型的成员必须先定义后使用,这一点与普通成员有所不同。...形式如下,注意成员初始值列表只能有一个唯一入口,就是类名本身。...即使进行了类内的静态常量初始化,也最好在类外定义一下该变量,只是不能再次指定初始值静态数据成员可以是不完全类型。...即,静态数据成员的类型可以就是它所属的类类型,而非静态数据成员只能是所属类的引用或指针。

82840
领券