一、静态成员变量概念 1、静态成员变量引入 在 C++ 类中 , 静态成员变量 又称为 静态属性 ; 静态成员归属 : 静态成员变量 是特殊的成员变量 , 是 类所有的 成员 , 而不是对象所有的成员...static int number; }; 3、静态成员变量初始化 静态成员变量 初始化 : 静态成员变量 是在 类使用时 , 在类的外部 进行 初始化 ; Student 类的 静态成员 成员变量...: 只对 类内部已定义的 静态成员变量 进行单纯的赋值 ; // 在函数中为 类 静态成员变量 赋值 Student::number = 2; 4、静态成员变量访问 静态成员变量访问 : 使用域操作符访问...:number = 1; 单独进行 静态成员变量 初始化 , 代码为 Student::number = 2 ; // 在函数中为 类 静态成员变量 赋值 Student::number = 2;...static int number; }; // 在类外部初始化静态成员变量 int Student::number = 1; int main() { // 使用 域操作符 访问 类静态成员变量
class Person { //用static关键字声明静态成员 static var name = "zz"; //静态值 var age = 18; static void show...() {//静态方法可以访问静态成员,但是不可以访问非静态的成员 print(name); } void getInfo() {//非静态成员可以访问静态成员以及非静态成员 print...(name); //访问静态属性 print(this.age); //访问非静态属性 show(); //调用静态方法 } } void main() { //静态成员无需实例即可进行访问
初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 3.其次,...初始化父类的普通成员变量和代码块,在执行父类的构造方法; 4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法; 类的加载顺序: 父类静态成员变量、静态块>子类静态成员变量、 静态块>...父类普通成员变量、非静态块>父类构造函数>子类 普通成员变量、非静态块>子类构造函数 静态代码块:随着类的加载而执行,而且只执行一次 非静态代码块:每创建一个对象,就执行一次非静态代码块 关于各个成员简介
派生类 ) 共享 ; 2、父类静态成员访问控制权限的改变 继承自 父类的 静态成员变量 , 仍然遵循 继承中 子类的 访问控制特性 , public 公有继承 : 父类成员 在 子类 中 , 访问控制权限...不变 , 共有 和 保护成员 可以在子类访问 , 私有成员不可在子类中访问 ; 父类中的 public 成员 仍然是 public 成员 ; 父类中的 protected 成员 仍然是 protected...和 保护成员 可以在子类访问 , 私有成员不可在子类中访问 ; 父类中的 public 成员 变为 子类中的 protected 成员 ; 父类中的 protected 成员 仍然是 protected...成员 仍然是 private 成员 ; 3、子类如何访问父类静态成员 子类中 使用 父类类名 :: 静态成员名 Parent::c = 20; 或 子类类名 :: 静态成员名 Child::c = 40...静态成员变量初始化 | 静态成员变量访问 | 静态成员变量生命周期 ) 博客 , 静态成员需要 先在类中定义静态变量 , class Parent { public: // 父类静态成员 static
C.4: Make a function a member only if it needs direct access to the representation of a class C.4:只有直接访问表达的函数...,才应该成为成员。...(C++)语言要求虚函数必须是成员,而且不是所有的虚函数都会直接访问数据。通常抽象类的成员很少直接访问数据。 Note multi-methods....Exception(列外) An overload set may have some members that do not directly access private data: 一组重载函数中也许会有某个成员不会直接访问私有数据...如果一组重载函数中至少有一个函数访问了私有成员,那么忽略其他函数。 Ignore functions returning this. 忽略返回this指针的函数。
成员内部类的常见修饰符及应用: private 为了保证数据的安全性 static 为了方便访问数据 注意:静态的内部类访问外部类的数据时,外部类的数据必须用静态修饰...成员内部类不是静态的,访问的格式: ?
C#的访问修饰符 修饰符 含义 private 只能在当前类中访问 public 同一程序集(DLL或EXE)中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。...protected 只有同一类或结构或者此类的派生类中的代码才可以访问该类型或成员。...static可以修饰方法、字段、属性或事件,始终通过类名而不是实例名称访问静态成员,静态字段只有一个副本。 静态类不能被实例化。...只读字段可以在声明或构造函数中初始化,每个类或结构的实例都有一个独立的副本。 可以与static一起使用,声明静态只读字段。...静态只读字段可以在声明或静态构造函数中初始化,静态常量字段只有一个副本。 virtual virtual关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。
(2)静态数据成员的初始化: 静态数据成员在类内定义,而不能在类内完成初始化,直接赋值和利用构造函数初始化都不可以。...int minute; int sec; }; 这个很好理解,这显然是错的,因为只有静态常量才能在类内完成初试化,要改成这样才可以static const int hour = 0;但是如果写成这样...那么应该如何完成静态数据成员的初始化:静态数据成员的初始化只能在类体外完成。...由于静态成员函数只能访问本类中的静态数据成员,而无法访问非静态数据成员,这样使程序设计更加清晰。 3.静态数据成员的特性 (1)静态成员函数的属性: 静态成员函数属于类,而不属于某一个对象。...(2)静态成员函数的访问: 静态成员函数只能访问本类中的静态数据成员。 非静态成员函数可以访问本类中的静态数据成员与非静态数据成员。
(函数调用开始,到程序执行完成时结束) 默认情况下,局部变量(定义在函数内部的变量)的作用域仅限于函数内部,只有函数被调用的时候才被初始化(存储于栈空间)和使用,函数执行完毕的时候被释放,而被static...静态成员存储于全局数据区,由于要给静态成员分配空间,因此普通的静态成员不能在类的声明中定义。...inline 静态数据成员可以在类定义中定义, 而且可以指定初始化器。它不需要类外定义。...普通的静态成员不能在类的声明中定义,需要在类的外面单独初始化。...静态成员函数能够访问静态成员,但不能访问非静态数据成员和非静态成员函数(因为非静态数据成员和函数是与类的对象绑定的,但静态成员函数不关联任何对象,且调用时,它们没有this指针。)。
在 C++ 中 static 的内部实现机制:静态数据成员要在程序一开始运行时就必须存在。因为函数在程序运行中被调用,所以静态数据成员不能在任何函数内分配空间和初始化。...静态数据成员要实际地分配空间,故不能在类的声明中定义(只能声明数据成员)。类声明只声明一个类的"尺寸和规格",并不进行实际的内存分配,所以在类声明中写成定义是错误的。...: 也就是说,无论开辟了多少类对象,静态成员变量都只有一个,并且不属于任何类对象本身,只有成员变量才属于类对象。...静态成员变量和类对象和其成员变量关系如下图: 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问 静态成员函数没有隐藏的...this指针,不能访问任何非静态成员;但非静态成员可以访问静态成员函数 静态成员也是类的成员,受public、protected、private 访问限定符的限制 ststic成员的应用 利用static
要设计一个只能在堆上创建的类,一共有两种方式: 将构造函数声明为私有,同时删除拷贝构造函数,然后提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建 通过将构造函数声明为私有,我们可以防止在类外部构造对象...所以我们需要一个 Destroy 成员函数,通过它来调用析构函数完成资源的清理;同时,Destroy 函数也不必声明为静态类型,因为只有类的对象才需要调用它;最后,我们也不需要再删除拷贝构造函数了,因为拷贝构造出来的栈对象或静态对象仍然无法调用析构函数...单例模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。...它符合懒汉模式的特点 – 只有在第一次使用单例对象时才去创建对象。...上面这种实现方式的缺点就是不稳定,因为只有在 C++11 及其之后的标准中局部静态对象的初始化才是线程安全的,而在 C++11 之前的版本中并不能保证;但是我们并不知道我们的代码将来会不会在一些比较老的编译器上运行
那么要对 对象中的每个成员变量定义初始化的话,就要走初始化列表,并且所有成员变量都要先走初始化列表!...类中的静态变量存储在 静态区,且作用域是类,属于每一个类的对象,我们访问它可以通过创建类,通过类去访问,也可以使用访问限定符A::N来访问。...2.static修饰私有成员变量 为私有成员变量时:我们在类外使用,则需要通过类内的成员函数才可以访问到: class A { public: A(int a = 0) :_a(...静态成员函数不需要this指针,是因为静态成员变量是类的所有对象共享的 只有那么一个,所以不管哪个对象调用返回的是同一个。所以静态不能访问非静态,所以静态成员函数是跟静态成员变量配合起来用的。...但是通过公有的成员函数访问私有构造函数,进而在成员函数中创建类,返回类。
成员变量与局部变量的区别 1.成员变量定义在类中,整个类中都能够访问。 局部变量定义在局部代码块中,只能在局部代码块中访问。 2.成员变量存在于堆内存中,有初始值。...构造函数只能在对象初始化的时候给对象中的成员变量进行一次赋值,创建完对象之后就不能再赋值了;若今后需要修改对象中的成员变量,就需要用set方法。 9.能否在成员函数中调用构造函数? 不行!...构造函数只能在初始化对象的时候调用,其他任何情况都不能使用。 10.构造函数是否有return? 有!...b) 静态代码块:为全是静态成员变量的类初始化。 c) 构造代码块:把同一个类中多个构造函数中通用的操作放在其中,从而提升代码复用率。...第二种方式:懒汉式,调用getinstance时对象才被创建。 注:效率其实差不多,因为不管什么时候创建对象,这个对象在内存中就只有一个,小的忽略不计,一般都选第一种。
该实现方式提供了该实例的全局访问点:当你需要时,通过延迟初始化获取这个单例对象。...这种方式同样利用了 classloader 机制来保证初始化 instance 时只有一个线程,它跟 使用静态成员变量创建单例方式不同的是:后者只要 Singleton 类被装载了,那么 instance...这个时候,这种方式相比 使用静态成员变量创建单例方式就显得很合理(这也是延迟初始化的优势所在)。...不过,由于 JDK1.5 之后才加入 enum 特性,用这种方式写不免让人感觉生疏,在实际工作中,也很少用。 而且不能通过 reflection attack 来调用私有构造方法。...\ \ \ 简洁 单例模式特点 单例模式确保程序中只有一个实例 单例模式的实现需要一个私有构造器、一个静态方法、一个静态变量 单例设计需要考虑多线程场景 不同JDK版本可能对单例的实现方式有所限制 多个类加载器会导致多个单例出现
单例模式之饿汉模式 //单例模式之饿汉模式 public class Singleton { //实例化对象 并且设置为私有静态成员变量 private static final...所以是公有的 public Singleton getInstance(){ return instance; } } 饿汉模式的特点 在类加载的时候就完成静态成员变量的初始化...,所以调用getInstance方法的时候就不存在线程安全的问题,但是这样也同样带来一个问题,就是目前我不需要这个类的对象,但是它已经帮我创建并且初始化,占据一块内存空间,而且因为是静态成员变量,因此只有当类卸载的时候才会释放对象的内存空间...单例模式之懒汉模式 懒汉模式-1 //单例模式之懒汉模式-1 public class Singleton { //创建对象引用不实例化 并且设置为私有静态成员变量 private...,使用同步代码块,保证多线程访问时对象在第一次创建后,不再重复被创建) synchronized (Singleton.class) { //未初始化
第7章 类 标签: C++Primer 学习记录 类 ---- 第7章 类 7.1 定义抽象数据类型 7.2 访问控制与封装 7.3 类的其他特性 7.4 类的作用域 7.5 构造函数再探 7.6 类的静态成员...---- 7.3 类的其他特性 在类中,除了定义数据和函数成员之外,还可以自定义某种类型在类中的别名,也存在访问权限。用来定义类型的成员必须先定义后使用,这一点与普通成员有所不同。...成员函数中出现的名字的查找过程: 首先,在成员函数内查找该名字的声明。此时,只有函数使用之前出现的声明才被考虑。 如果成员函数内没有找到,则在类内继续查找,这时类内所有成员都可以考虑。...非字面值常量类型的静态数据成员必须在类外进行初始化。 能进行类内初始化的静态数据成员必须是字面值常量,包括算术类型、引用、指针等。其中,vector、string不是字面值类型。...即使进行了类内的静态常量初始化,也最好在类外定义一下该变量,只是不能再次指定初始值。 静态数据成员可以是不完全类型。
类与对象 构造函数的初始化列表 初始化列表 自定义类型与初始化列表 explicit关键字 static成员 静态成员变量 静态成员函数 友元 内部类(类中类) 匿名对象 拷贝对象时的一些编译器优化...静态成员变量 之前说过,全局的静态在哪里都能用,局部的静态只能在局部用,那么类里面的静态只能在类里用,并且是类的对象通用(但是要注意不是在对象里面储存,是在静态区)。...这里要注意,静态成员函数没有this指针,只能访问静态成员。...友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。...S类为其友元类,那么可以在S类中直接访问N类的私有成员变量,但想在N类中访问S类中私有的成员变量则不行。
答:静态变量是指用static关键字修饰的成员变量,他在类装载的时候就进行了初始化,并且永驻内存,可通过类名来访问,不需创建对象;实例变量是指没有用static关键字修饰的成员变量,它只有在类创建对象的时候才初始化...,它只能在类创建对象后,通过对象才可以访问。...静态方法在类装载时已经加载了,而非static方法只有在创建对象时才初始化,没有初始化是不能使用的。 36、内部类的作用是什么?体现在哪里?详细叙述。...因为静态的成员在类装载的时候和类一起加载,然而非静态内部类相当于类的局部变量一样,在创建对象的时候才初始化,所以非静态内部类不能有静态成员。 52、何为javabean?...54、静态变量、实例变量、局部变量的声明周期及初始化过程介绍? 答:静态变量:类的静态变量在内存中只有一个,Java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被所有类的实例共享。
当子类和父类有相同的成员方法时(这里的成员方法相同是指方法签名完全相同,方法重载这种只有方法名相同的不算),访问该成员方法,则优先访问子类的成员方法。...在子类方法中,如果想要明确访问父类中成员时,借助super关键字即可。 【注意事项】 1. 只能在非静态方法中使用 2. 用在子类方法中,访问父类的成员变量和方法。 其他的事项在后文中介绍。...都是Java中的关键字 2. 它们都只能在类的非静态方法中使用。在静态方法中都用不了。 3....在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性 3....首先说下类的加载会导致静态成员变量先初始化(父类的静态变量先初始化,子类的静态变量后初始化),而后是静态代码块初始化(父类的静态代码块先执行,子类的静态代码块再执行),因为类的加载只有一次,所以它们只能执行一次
不推荐:普通方法中不推荐通过对象或者this关键字访问静态变量、静态方法【static代表类层次,this代表当前类的对象】,建议使用类名访问。 注意事项:静态只能访问静态。...两者的区别是: 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便)。...用private修饰的static成员变量,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用,但是不能在其他类中通过类名来直接引用。...不能在静态方法中访问非静态的成员变量。...静态导包 静态导包格式:import static 这两个关键字连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中静态成员,可以直接使用类中静态成员变量和成员方法 静态导包在书写代码的时候确实能省一点代码
领取专属 10元无门槛券
手把手带您无忧上云