静态成员

C/C++中的const、static、inline、friend、template、virtual、异常机制等特性

徘徊边缘 提交于 2020-01-11 07:16:46
一、const const关键字的作用 (1)作用: 1)欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了; 2)对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const; 3)在一个函数声明中,const可以修饰形参表明他是一个输入参数,在函数内部不可以改变其值; 4)对于类的成员函数,有时候必须指定其为const类型,表明其是一个常函数,不能修改类的成员变量; 5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。 const修饰变量 变量的值不能改变 const修饰指针 如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量 如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量 指针常量:不能通过指针来修改变量的值。 常量指针:一直指向该变量,不能给该指针赋予其他地址 函数中使用const const修饰函数参数 表示参数不可变 若参数为引用,可以增加效率 const引用传递和函数按值传递的效果是一样的,但按值传递会先建立一个类对象的副本, 然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效 const按值传递时只是外部对象的拷贝,值的改变不会对外部有什么影响

一般函数指针和类的成员函数指针

↘锁芯ラ 提交于 2020-01-05 04:25:47
转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/11/26/2264709.html 函数指针是通过指向函数的指针间接调用函数。函数指针可以实现对参数类型、参数顺序、返回值都相同的函数进行封装,是多态的一种实现方式。由于类的非静态成员函数中有一个隐形的this指针,因此,类的成员函数的指针和一般函数的指针的表现形式不一样。 1、指向一般函数的指针 函数指针的声明中就包括了函数的参数类型、顺序和返回值,只能把相匹配的函数地址赋值给函数指针。为了封装同类型的函数,可以把函数指针作为通用接口函数的参数,并通过函数指针来间接调用所封装的函数。 下面是一个指向函数的指针使用的例子。 #include <iostream.h>/*指向函数的指针*/typedef int (*pFun)(int, int);int Max(int a, int b){ return a > b ? a : b;}int Min(int a, int b){ return a < b ? a : b;}/*通用接口函数,实现对其他函数的封装*/int Result(pFun fun, int a, int b){ return (*fun)(a, b);}void main(){ int a = 3; int b = 4; cout<<"Test

静态成员函数和常成员函数

核能气质少年 提交于 2020-01-04 07:09:22
静态成员:不管这个类创建了多少个对象,静态成员在内存中只保留一份,静态成员用来解决同一个类中不同对象之间数据成员和函数的共享问题。 1、静态成员函数是用关键词static声明的成员函数,它属于整个类而并不属于类的某个对象。 类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。 由于静态函数是独立于类对象而存在的,因此静态成员函数中没有this指针。所以静态成员函数不可以直接访问类中的非静态成员,但是可以直接访问静态成员。 若要访问非静态成员时,必须通过参数传递的方式得到相应的对象,再通过对象来访问。 class B{ private: int x; int y; static int count; public: B():x(0), y(0){ count++; } B(int xx, int yy):x(xx), y(yy){ count++; } static int getObjCount(); }; int B::count = 0; int B::getObjCount(){ return count; } int main() { cout << B::getObjCount() << endl; B b1;

C/C++内存四区

烂漫一生 提交于 2019-12-27 02:15:27
内存模型图 32位CPU可寻址4G线性空间,每个进程都有各自独立的4G逻辑地址,其中0~3G是用户态空间,3~4G是内核空间,不同进程相同的逻辑地址会映射到不同的物理地址中。其逻辑地址其划分如下: 各个段说明如下: 3G用户空间和1G内核空间 静态区域: text segment( 代码段 ):包括只读存储区和文本区,其中只读存储区存储字符串常量,文本区存储程序的机器代码。 data segment( 数据段 ):存储程序中已初始化的全局变量和静态变量 bss segment( BSS段 ):存储未初始化的全局变量和静态变量(局部+全局),以及所有被初始化为0的全局变量和静态变量,对于未初始化的全局变量和静态变量,程序运行main之前时会统一清零。即未初始化的全局变量编译器会初始化为0 动态区域: heap( 堆区 ): 当进程未调用malloc时是没有堆段的,只有调用malloc时采用分配一个堆,并且在程序运行过程中可以动态增加堆大小(移动break指针),从低地址向高地址增长。分配小内存时使用该区域。 堆的起始地址由mm_struct 结构体中的start_brk标识,结束地址由brk标识。 memory mapping segment( 映射区 ):存储动态链接库等文件映射、申请大内存(malloc时调用mmap函数) stack( 栈区 ):使用栈空间存储函数的返回地址

C++学习总结16--静态成员(static)和单例模式

一个人想着一个人 提交于 2019-12-21 23:48:04
小记:静默如初,安之若素 1.静态成员 1. 静态成员变量 1)语法: class 类名 { static 数据类型 变量名 ; //声明 } ; 数据类型 类名::变量名 = 初值 ; //定义,求一个对象大小和静态成员变量无关 2)语法规则: (静态成员变量和普通成员变量的区别) 2.1) 普通的成员变量属于对象,而静态成员变量不属于对象( 从内存角度进行分析 ); 2.2)静态成员变量不能在构造函数中定义和初始化,需要在类的外部单独定义和初始化; 2.3)静态成员变量和全局变量一样存放在全局区,可以把静态成员变量理解成是被限制在类中去使用 的全局变量。 3)使用方法: 类名 :: 静态成员变量 //推荐 对象名 . 静态成员变量名 //和上面方法本质一样 1 #include < iostream > 2 using namespace std ; 3 4 class A 5 { 6 public : 7 //普通的成员变量在构造函数初始化 8 A ( int data = 0 ) : m_data ( data ) { } 9 10 int m_data ; 11 static int s_data ; //声明 12 } ; 13 14 //静态成员变量需要在类外部单独定义和初始化 15 int A :: s_data = 10 ; //定义 16 17 int main

静态函数和非静态函数的区别

妖精的绣舞 提交于 2019-12-21 04:24:01
看别人的博客总结: 静态数据成员的使用方法和注意事项如下: 1、静态数据成员在定义或说明时前面加关键字static。 2、静态成员初始化与一般数据成员初始化不同。 静态数据成员初始化的格式如下: <数据类型><类名>::<静态数据成员名>=<值> 这表明: (1) 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。 (2) 初始化时不加该成员的访问权限控制符private,public等。 (3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。 静态成员的概念: 静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员先于类的声明而存在于内存,也可以根据类声明的对象来访问.而非静态成员必须实例化之后才会分配内存. 非静态成员的概念: 所有没有加static的成员都是非静态成员.而类被实例化后,可以通过实例化的类名进行访问.非静态成员的生存期决定于该类的生存期.而静态成员不存在生产期的问题,因为它始终驻留在内存. 分两个方面来总结,面向过程与面向对象. 一:面向过程中的static关键字 1.静态全局变量 定义全局变量前,加上关键字static,该变量就被定义成了一个静态全局变量. 特点: 该变量在全局数据区分配内存. 初始化:如果不是显示初始化

对Static 类的认识

杀马特。学长 韩版系。学妹 提交于 2019-12-19 21:45:27
在学习 Design&Pattern 的 Singleton Pattern 的时候,因为静态初始化是在 .NET 中实现 Singleton 的首选方法. 1 public sealed class Singleton 2 { 3 static readonly Singleton instance = new Singleton(); 4 5 static Singleton() 6 { 7 } 8 9 Singleton()10 {11 }12 13 public static Singleton Instance14 {15 get16 {17 return instance;18 }19 }20 } 不过我对于静态构造函数还是有点迷惑!它和实例化对象时的构造函数有什么区别,它们的关系又是什么呢? 查看了相关资料后现在对它有了一定的认识了! 静态成员的初始化语句会早于静态构造函数执行,其次静态构造函数是由CLR调用执行的,所以静态构造函数只能是一个,同时不能还有参数。那么静态构造函数相对于成员初始化的一些弊端都不复存在。 对于静态成员何时被初始化,静态构造函数又何时被调用,它们之间的先后顺序又是怎么样的呢?下面我们给出一个例子来说明一下! 1 using System; 2 3 namespace testStatic 4 { 5 class Program 6 { 7

静态变量与静态方法

夙愿已清 提交于 2019-12-19 16:07:52
static的用法 static可以用于修改成员变量,表示静态的成员变量,用于修饰方法表示静态方法。 静态成员变量和静态方法都是类所有,所有对象都共享。 调用静态成员变量和静态方法时,可以通过 类 名直接调用,也可以通过 对象 的方式调用。 public class Peace { public static String name ; //创建静态变量: 修饰符+static+类型+变量名; //注意,局部变量不能定义成静态的,会直接报错; public static void method ( ) { //创建静态方法 System . out . println ( "aaaa" ) ; // public static int a=0; //错误的定义静态的局部变量 } public static void main ( String [ ] args ) { method ( ) ; System . out . println ( name ) ; //通过类名直接调用静态方法和静态成员变量 Peace . method ( ) ; System . out . println ( Peace . name ) ; //通过对象调用静态方法和静态成员变量 Peace peace1 = new Peace ( ) ; //创建对象 peace1 . method ( )

TypeScript static 关键字

 ̄綄美尐妖づ 提交于 2019-12-18 15:42:17
static 关键字 static 关键字用于定义类的数据成员(属性和方法)为静态的,静态成员可以直接通过类名调用。 class StaticMem { static num : number ; static disp ( ) : void { console . log ( "num 值为 " + StaticMem . num ) } } StaticMem . num = 12 // 初始化静态变量 StaticMem . disp ( ) // 调用静态方法 来源: CSDN 作者: 猫的尾巴有墨水 链接: https://blog.csdn.net/Xidian2850/article/details/103596590

python的静态成员变量、实例成员变量、静态方法、类方法、实例方法

笑着哭i 提交于 2019-12-09 19:37:35
静态成员变量(类变量)和普通成员变量(实例变量) 静态成员变量只能通过类名.变量名获得,实例成员变量,通过该实例引用.变量名获得。 在实例对静态成员变量赋值时,实例 python是动态类型的语言,没有特别的标志区分静态成员变量和普通成员变量 如果你使用类名.成员变量 那这个成员变量现在就是静态成员变量(类变量) 如果你使用实例.成员变量 那这个成员变量现在就是普通成员变量(实例变量) 实例变量的值是什么时候初始化的,实例变量并不是构造对象的时候初始化的,而是在第一次通过对象调用该实例变量的 时候,从类变量此时的值拷贝过来的,此后便互不影响。 静态方法、类方法、实例方法 实例方法,类中的普通方法,由实例调用 类方法,被@classmethod装饰的方法,类对象和实例都可以调用类方法 静态方法,被@staticmethod装饰的方法,类对象和实例都可以调用静态方法,静态方法不会对任何实例造成影响 实例方法和类方法的区别是,实例方法的第一个参数是self(实例本身),类方法的第一个参数是cls(类对象本省) 注意:这里的类对象和实例对象的意思是 type(类名)---classobj type(实例名)-instance 个人感觉静态的概念在python中真的没多大用 ,因为这是个动态语言。 来源: oschina 链接: https://my.oschina.net/u/2322561