[简介] 1.静态数据成员在类中声明,在源文件中定义并初始化: 2.静态成员函数没有this指针,只能访问静态数据成员: 3.调用静态成员函数:(1)对象.(2)直接调用: 4.静态成员函数的地址可用普通函数指针储存,可作为回调函数的参数. [1.静态数据成员] 1.静态数据成员与全局变量一样都是静态分配存储空间的,在编译时,就要为类的静态数据成员分配存储空间.但全局变量在程序中的任何位置都可以访问它,而静态数据成员受到访问权限的约束.必须是public权限时,才可能在类外进行访问. 2.静态数…
知识点学习 类 const作用 C语言的const限定符的含义为"一个不能改变值的变量",C++的const限定符的含义为"一个有类型描述的常量": const修饰指向的实体类型被称为常量指针,限定指针必须指向一个地址 const int * p = &a; //与上一条语句等价 int const * dp = &b; const修饰指针*cp被称为 指针常量,限定指针值不能修改: int * const cp = &b const加在函数…
一 静态数据成员: 1.静态数据成员的定义. 静态数据成员实际上是类域中的全局变量.所以,静态数据成员的定义(初始化)不应该被放在头文件中,因为这样做会引起重复定义这样的错误.即使加上#ifndef #define #endif或者#pragma once也不行.  其定义方式与全局变量相同.举例如下:  xxx.h文件  class base{ private: static const int _i;//声明,标准c++支持有序类型在类体中初始化,但vc6不支持. }; xxx.cpp文件 …
一般情况下,如果有n个同类的对象,那么每一个对象都分别有自己的数据成员,不同对象的数据成员各自有值,互不相干.但是有时人们希望有某一个或几个数据成员为所有对象所共有,这样可以实现数据共享. 可以使用全局变量来达到共享数据的目的.例如在一个程序文件中有多个函数,每一个函数都可以改变全局变量的值,全局变量的值为各函数共享.但是用全局变量的安全性得不到保证,由于在各处都可以自由地修改全局变量的值,很有可能偶然失误,全局变量的值就被修改,导致程序的失败.因此在实际工作中很少使用全局变量. 如果想在同类的…
1.静态成员函数.静态数据成员 在类中,用static修饰的成员函数被称为静态成员函数,而用static修饰的数据成员就称为静态数据成员:与普通的成员函数和数据成员不同, 静态成员函数和静态数据成员有自己独有的特点和用法,定义方法如下: class Tank{ public: static void func(void); // 声明静态成员函数 .......... private: static int m_iCount; // 声明静态数据成员 ....... } ; // 初始化静态数据…
from:://http://blog.csdn.net/taina2008/article/details/1684834 把类中的函数都定义成静态函数,这样相当于在编译时就分配了空间,这样不需要实体对象也可以调用泪中的函数了. C++类静态数据成员与类静态成员函数 我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点: 声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数. 下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况…
    C++类静态数据成员与类静态成员函数 在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点: 声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数. 下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为protected(保护状态)的,但是我们为了简化代码,使要…
转自:C语言中的static变量和C++静态数据成员(static member) C语言中static的变量:1).static局部变量        a.静态局部变量在函数内定义,生存期为整个程序运行期间,但作用域与自动变量相同,只能在定义该变量的函数内使用.退出该函数后, 尽管该变量还继续存在,但不能使用它.        b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值.而对自动变量不赋初值,则其值是不定的.2).static全局变量        全局变量本身就是静…
类的静态成员不能由类的构造函数来初始化.因为即使不存在类的任何对象时,类的静态成员依然存在并且可以被使用.类的静态成员也不能访问任何类的非静态成员. 类名和类对象都可以直接调用静态数据成员.因为静态数据成员在执行构造函数之前都已经存在了. 但如果静态成员是整型或是枚举型const,则可以在类声明中初始化!! static修饰的函数表示该函数是属于类的,而不是属于某一个对象的,没有this指针. 在C++类的成员变量被声明为static(称为静态成员变量),意味着它为该类的所有实例所共享,也就是说…
注意不要说类的大小,是类的对象的大小. 首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的. 用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小. 如果 Class A; A obj; 那么sizeof(A)==sizeof(obj) 那么sizeof(A)的大小和成员的大小总和是什么关系呢,很简单,一个对象的大小大于等于所有非静态成员大小的总和. 为什么是大于等于而不是正好相等呢?超出的部分主要有以下两方面: 1) C++对象模型本身 对于具有虚函数的类型来…
静态数据成员是在一个类中用关键字static声明的数据成员.在C++中,一般使用静态成员来代替C语言的全局变量,以达到数据共享.C和C++的全局变量有一定的局限性,可以任意被修改,也容易和其它的变量名冲突,故在C++中,一般不使用全局变量. 静态数据成员必须进行初始化,初始化应在类体外进行,静态数据成员也可以引用,但不能引用私有数据部分. 接下来看一个例子: #include <iostream> #include <cstring> using namespace std ; c…
刚开始学习C++的类和对象的部分,对类中的常数据成员和静态数据成员的概念和用法经常混淆,所以今天整理一下,顺便说一下,今天是我的生日,祝我生日快乐,呵呵. 常数据成员 常数据成员是指在类中定义的不能修改其值的一些数据成员,类似于我们以前学过的常变量,虽然是变量,也有自己的地址,但是一经赋初值,便不能再被修改. 适用于类中定义一些初始化之后不希望被修改的变量. 定义方法: const 类型名 变量名; (1)类中的常数据成员只能通过构造函数的参数初始化表进行初始化. (2)常数据成员是实例化对象的…
静态数据成员: 在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员.先举一个静态数据成员的例子. #include<iostream> using namespace std; class MyClass { private: int a, b, c; static int sum;//声明静态数据成员 public: MyClass(int a, int b, int c); void GetSum(); } ; //定义并初始化静态数据成员 MyClass::M…
原文:C/C++杂记:深入理解数据成员指针.函数成员指针 1. 数据成员指针 对于普通指针变量来说,其值是它所指向的地址,0表示空指针.而对于数据成员指针变量来说,其值是数据成员所在地址相对于对象起始地址的偏移值,空指针用-1表示.例: 代码示例:   2. 函数成员指针 函数成员指针与普通函数指针相比,其size为普通函数指针的两倍(x64下为16字节),分为:ptr和adj两部分. (1) 非虚函数成员指针 ptr部分内容为函数指针(指向一个全局函数,该函数的第一个参数为this指针),ad…
1. 数据成员指针 对于普通指针变量来说,其值是它所指向的地址,0表示空指针. 而对于数据成员指针变量来说,其值是数据成员所在地址相对于对象起始地址的偏移值,空指针用-1表示.例: 代码示例: struct X { int a; int b; }; #define VALUE_OF_PTR(p) (*(long*)&p) int main() { ; // VALUE_OF_PTR(p) == -1 p = &X::a; // VALUE_OF_PTR(p) == 0 p = &X…
有时需要为某个类的所有对象分配一个单一的存储空间,这个存储空间只是被这个类的对象访问,其他人不能访问,那么这时静态的成员变量是有用的.例如下面用来统计一共创建了多少个对象的变量num class classVar{ static int num; public: classVar(){num++;} ~classVar(){num--;} int getNum(){return num;} }; int object::num = 0; int main(){ classVar var1; {…
静态成员属于全局变量,是所有实例化以后的对象所共享的,而成员的初始化你可以想象成向系统申请内存存储数据的过程,显然这种共有对象必须提前申请好,而不是由某个实例化的对象来操纵的. #include <stdio.h> class A { public: static int a; //声明但未定义 }; int main() { printf("%d", A::a); return 0; } 编译以上代码会出现“对‘A::a’未定义的引用”错误.这是因为静态成员变量a未定义,…
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011292087/article/details/37598919 有关const成员.static成员.const static成员的初始化: 1.const成员:仅仅能在构造函数后的初始化列表中初始化 2.static成员:初始化在类外.且不加static修饰 3.const static成员:类仅仅有唯一一份拷贝,且数值不能改变.因此,能够在类中声明处初始化,也能够像static在类外初始…
conv_xxx.hpp class convolution { ... ... typedef std::map<int, std::string> ConvDtMap; static ConvDtMap conv_dt_map; static ConvDtMap CreateDtMap() { ConvDtMap tmp_map; tmp_map.insert(std::pair<int, std::string>(0, "INVALID")); retur…
#include <iostream> /* 静态成员函数只能访问静态数据成员.静态成员函数和类以外的函数和数据,不能访问非静态数据成员,但静态成员函数或静态数据成员可由任意访问许可的函数访问.原因是:当前对象的地址(this)是被隐含地传递到被调用的函数的.但一个静态成员函数没有this指针,所以它无法访问非静态的成员函数. */ class a { public: static void FunctionA()//静态成员函数没有隐含的this自变量 { //menber = 1;//er…
.h文件中定义 static变量后,如 static QTcpSocket * socket; 那么一定要在.cpp中 构造函数的外面将其初始化为 QTcpSocket * Cfiletransfer::m_socket = NULL; 否则会报错:如无法识别的外部变量... # include <iostream> using namespace std; typedef struct { int Index; char str[256]; } stArr; class Base { pri…
数据成员可以分为静态变量.非静态变量两种. 静态成员:静态类中的成员加入static 修饰符,即是静态成员,可以使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态成员,因为静态成员存在于内存,所以非静态成员可以直接访问类中的静态成员. 非静态成员:所以没有加static的成员都是非静态成员,当类被实例化后,可以通过实例化的类名进行访问,非静态成员的生存期决定于该类的生存期,而静态成员则不存在生存期的概念,因为静态成员始终驻留在…
数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员. 非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员…
数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员. 非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员…
静态(static) 成员 变量 1•  静态成员变量的初始化须要在类外完毕. 2•  静态成员不属于详细的某个对象,而属于整个类: 3•  全部对象共享本类中的静态成员: 4•  静态成员最好直接通过类名::成员来訪问和调用. 静态成员函数 静态成员函数中没有this指针 出如今类体外的函数定义不能指定keywordstatic. 静态成员之间能够相互訪问,包含静态成员函数訪问静态数据成员和訪问静态成员函数: 非静态成员函数能够随意地訪问静态成员函数和静态数据成员: 静态成员函数不能訪问非静态…
静态数据成员属于类,非属于类对象,所以,定义位置就有了限制. 静态数据成员要实际地分配空间,故不能在类的声明中定义(只能声明数据成员).类声明只声明一个类的“尺寸和规格”,并不进行实际的内存分配,所以在类声明中写成定义是错误的.它也不能在头文件中类声明的外部定义,因为那会造成在多个使用该类的源文件中,对其重复定义. 静态成员函数只能调用静态成员,要调用非静态成员,只能通过类对象,但一般成员函数可以调用静态成员函数. 下面是一个综合性示例,对上面所说都有涉及: #include <iostream…
关于结构体和C++类的内存地址问题 C++类是由结构体发展得来的,所以他们的成员变量(C语言的结构体只有成员变量)的内存分配机制是一样的.下面我们以类来说明问题,如果类的问题通了,结构体也也就没问题啦. 类分为成员变量和成员函数,我们先来讨论成员变量. 一个类对象的地址就是类所包含的这一片内存空间的首地址,这个首地址也就对应具体某一个成员变量的地址.(在定义类对象的同时这些成员变量也就被定义了)我们来以一段代码说明问题: class K { public: K(){k = 12;} ~K(){}…
c++中静态成员函数属于整个类, 而不是某个对象,因此不需要创建对象就可以访问 1.出现在类体外的函数定义不能指定关键字static:2.静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数:3.非静态成员函数可以任意地访问静态成员函数和静态数据成员:4.静态成员函数不能访问非静态成员函数和非静态数据成员:5.由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长:6.调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指…
静态成员函数 与静态数据成员一样,我们也可以创建一个静态成员函数,它为类的全部服务而不是某一个类的具体对象服务.静态成员函数与静态数据成员一样,都是类的内部实现,属于类定义的一部分.普通的成员函数一般都隐含一个this指针,this指针指向类的对象本身,因为普通成员函数总是具体的属于某个类的具体对象的.通常情况下,this都是缺省的.如函数fn()实际是this->fn().但是与普通函数相比,静态成员函数由于不是与任何的对象相联系,因此它不具有this指针.从这个意义上讲,它无法访问属于类对象…
一:静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员.和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则.同时,静态数据成员还具有以下特点: 1.静态数据成员的定义. 静态数据成员实际是类域中的全局变量,其定义方式与全局变量相同. 例如: class base { private: static const int x; }; ; //初始化时不受private和protected访问限制 注意:不要…