C++:static类

static自我理解

static使得数据成员或者函数生命周期为整个文件所在程序的生命周期, 在C中还可以用它避免被其它文件使用为外部成员

static类

明确:类的静态数据成员它被所有类对象共享,但它是属于类的,而不是类的对象的

定义静态成员:static只出现在类内部的声明语句中

静态成员函数在类的内部与外部均可以定义(只需要在函数声明前加上static)

class a1{
....
static void func1();
};
void  a1::func1(){...}


因为静态数据成员不属于类的任何一个对象,这意味着它们不是有类的构造函数初始化的,必须在类的外部
定义与初始化每个静态数据成员且只能定义一次

并且最好与其它非内联函数的定义放在一个文件下

类内初始化方法:

我们可以为静态成员提供const 整数类型 类内初始值,不过要求静态成员必须是字面值类型的constexpr

eg: static constexpr int period = 30;

静态成员能用于某些场景:

静态数据成员可以是不完全类型:
eg:

class Bar{
    public:...
    private:
    static Bar mem1;  //OK
    Bar *mem2; //OK
    Bar mem3; //ERROR
};

我们可以使用静态成员作为默认实参
eg:

class Screen{
public:
Screen & clear(char = bkground)
private:
  static const char bkground;
};

原文地址:https://www.cnblogs.com/Liberavi/p/11568543.html

时间: 2024-10-03 22:40:06

C++:static类的相关文章

c++ static 类成员

一.什么是static类成员 对于特定类类型的全体对象而言, 访问一个全局对象有时是必要的. 然后,全局对象会破坏封装: 对象需要支持特定类抽象的实现. 如果对象是全局的, 一般的用户代码就可以修改这个值. 类可以定义类静态成员,而不是定义一个可普遍访问的全局对象. 通常, 非static数据成员存在于类类型的每个对象中. 不像普通的数据成员, static数据成员独立于该类的任意对象而存在, 每个static数据成员是与类关联的对象, 并不与该类的对象相关联. 类也可以定义static成员函数

探秘static——类不需实例化就能用?

一般情况下,需要用到某个类的时候,都必须先实例化这个类,才能对其进行调用.在编程过程中发现,有些类不用实例化就可以直接拿来使用,使用它的字段.方法等等. 这时候,靠的就是static作用.static英文意思为"静止的,静态的",在编程中可以作为修饰符,类.字段.属性.方法等被static修饰后,变为静态类.静态字段.静态属性.静态方法-- static修饰的类成为静态类,静态类中只能包含静态成员(被static修饰的字段.属性.方法),不能被实例化,不能被继承:非静态中可以包含静态成

何时使用static类(工具类)

一个static类,指全部成员都是static方法构成的,而没有任何成员变量, 也称为Utility class 或者Utility Pattern [参考: Utility Pattern].它可以在程序中直接使用该类的方法,而不用实例化.static class相对单例有更好的性能,原因是它的方法不需要实例方法的动态绑定 (static方法本身不能被复写). static类可以看作某一组方法的集合,也能够更好的复用代码.static类各个方法应当是无状态的(stateless),即没有成员变

C++中static类成员

static局部变量 static局部变量确保不迟于在程序执行流程第一次经过该对象的定义语句时进行初始化 这种对象一旦被创建,在程序结束前不会被撤销.在该函数被多次调用的过程中,静态局部对象会持续存在并保存它的值. #include<iostream> #include<string> #include<assert.h> using namespace std; size_t count_calls() { static size_t ctr=0; return ++

Java语言中的static类和类与类之间的总结

一.static类 1.static类的定义  static被称为静态,可以用来修饰类的属性或方法.  如果类的某个属性,不管创建多少个对象,属性的存储空间只有唯一的一个,那么这个属性就应该用static修饰,被static修饰的属性称为静态属性.  static属性可以使用对象调用,也可以直接用类名调用.  静态属性的类的所以对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个. public class Employee{ private String name;----------

static 类中的静态成员,组合类,友元函数 ,内部类

static 表示静态的意思 在c++中有两种表示 ,静态成员变量和静态成员函数 一个类中的静态成员只属于当前类,不属于某个对象.一个类的静态成员只有一份由当前类所有,每个对象都可以访问静态成员,当然也可以通过类名来访问 这里推荐用类名::静态成员来访问 static 成员函数应该在所有的成员函数之外初始化 如果不初始化系统默认为0 static 成员函数只能访问static成员 static成员函数  ,函数体内不能使用this指针 在我前前面已经说过组合类的概念了,今天我再介绍两个类,友元,

ListView优化为何ViewHolder用static类(转载)

如果有人还不了解ViewHolder为什么可以起到优化作用,我这边再做下简单说明:Android的findViewById动作是比较耗时的,需要遍历布局的树形结构,才能找到相应的视图.所以如果想在这一块进行优化,我们就需要把find过后的内容进行缓存,所以就用ViewHolder的方法. 这个方法很容易理解,但是可能有些人还是比较较真,就像我,这样可以起到缓存作用,那为什么内部类非得要声明成static的呢,普通的内部类不是也起到这样的效果吗?这个疑问也困扰了我很久.直到我看了<Effectiv

static类成员

static成员函数不能被声明为const: stati数据成员必须在类定义体的外部定义.不像普通数据成员,static成员不是通过类构造函数进行初始化,而是应该在定义的时候进行初始化. ps:特殊的整型 const static 成员 一般而言,类的static成员,像普通数据成员一样,不能再类的定义体种初始化.相反,static数据成员通常在定义体中进行初始化. 只要初始化式是一个常量表达式,整型congst static 数据成员就可以在类的定义体中进行定义.

static 类中的静态成员

static 表示静态的意思 在c++中有两种表示 ,静态成员变量和静态成员函数 一个类中的静态成员只属于当前类,不属于某个对象.一个类的静态成员只有一份由当前类所有,每个对象都可以访问静态成员,当然也可以通过类名来访问 这里推荐用类名::静态成员来访问 static 成员函数应该在所有的成员函数之外初始化 如果不初始化系统默认为0 static 成员函数只能访问static成员 static成员函数  ,函数体内不能使用this指针