静态成员数据和静态成员函数

/*
含有静态数据成员的类在创建对象时不为静态数据成员分配存储空间,可以将静态数据成员看成一个全局变量,将其封装在某个类中有两个目的
(1)限制该变量的作用范围,例如,将其放在类的私有部分声明,则它只能有该类对象的函数成员直接访问
(2)将意义相关的全局变量和相关的操作物理地放在一起,可以增加程序的可读性和可维护性

静态成员函数
1)静态成员函数是同类的所有对象共享的资源,只有一个公用的副本,因此它不能直接访问非晶态的数据成员,必须要通过某个该类的对象才能访问,
一般的成员函数可以直接访问非静态的数据成员
2)在静态成员函数中访问的基本上是静态数据成员或者全局变量
3)类名::静态成员函数名
4)一个趔IDE静态成员函数于非静态成员函数不同,它不需要创建任何该类的对象就可以被调用,静态成员函数的使用虽然不针对某一个特定的对象,但在使用时系统
中最好已经存在该类的对象,否则无意义
5)静态成员函数不能使虚函数,若非静态成员函数和经台成员函数具有相同的名字很参数类型将是非法的
*/
#include<iostream>
using namespace std;
class Student {
  public:
   void Set(string str) {
   name=str;
   number++;
   }
   static int PrintNumber() {//静态成员函数
       cout<<number<<"total numbers"<<endl;
   }
   void Print() {
    cout<<name<<"->students are"<<number<<"numbers"<<endl;
   }
   private:
    static int number;//静态数据
    string name;
};
int Student::number=0;//静态数据初始化
int main() {
   Student s,s1;
   Student::PrintNumber();//调用静态成员函数
   s.Set("Smith");
   s.Print();
   Student::PrintNumber();
   s1.Set("jenny");
   s1.Print();
   s1.PrintNumber();
   return 0;
}

结果:

0total numbers
Smith->students are1numbers
1total numbers
jenny->students are2numbers
2total numbers

--------------------------------
Process exited after 0.2102 seconds with return va
请按任意键继续. . .

时间: 2024-10-13 10:40:50

静态成员数据和静态成员函数的相关文章

[email&#160;protected]类的静态成员变量和静态成员函数

参考: http://blog.csdn.net/morewindows/article/details/6721430 http://www.cnblogs.com/lzjsky/archive/2011/01/24/1943199.html 分析Qt程序时,碰到下面代码. QString str = QString("QFrame#avatar{border-image:url(%1.jpg)}").arg( QString::number(i) );   静态成员变量 静态成员函

C++类中的静态成员变量与静态成员函数

最近一直看c++相关的项目,但总是会被c++类中的静态成员变量与静态成员函数的理解感觉很是模糊,不明白为什么类中要是用静态成员变量.于是在网上搜集了一些资料,自己再稍微总结下. 静态成员的概念: 静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员先于类的声明而存在于内存,也可以根据类声明的对象来访问.而非静态成员必须实例化之后才会分配内存. 非静态成员的概念: 所有没有加static的成员都是非静态成员.而类被实例化后,可以通过实例化的类

C++类静态成员与类静态成员函数

当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享.各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关.静态方法就是与该类相关的,是类的一种行为,而不是与该类的实例对象相关. 静态数据成员的用途之一是统计有多少个对象实际存在. 静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的.也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一

static作用,静态成员变量和静态成员函数

static关键字有俩作用:(1).控制存储分配:(2).控制一个名字的可见性和连接. 随着C++名字空间的引入,我们有了更好的,更灵活的方法来控制一个大项目的名字增长. 在类的内部使用static是在全程序中控制名字的另一种方法.这些名字不会与全局名冲突,并且可见性和访问也限制在程序内部,使得在维护代码时有更多的控制. 数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静

C++ 类中的静态成员变量,静态成员函数

//类中的静态成员变量,静态成员函数 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; /* 静态成员函数是属于整个类, static修饰的变量,是属于类,,所有的对象都能共享用. 在类的静态数据成员函数中,是不能调用具体的对象的变量的属性, 这是因为static修饰的变量是整个类共享,在静态成员函数中使用一个对象的成员属性 c++编译器无法知道这个成员属性是哪个对象的 所以在静态成员函数中只能使用静

C++静态成员变量和静态成员函数使用总结

       C++静态成员变量和静态成员函数使用总结: 一.静态成员变量: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员.和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则.同时,静态数据成员还具有以下特点: 1.静态数据成员的定义. 静态数据成员实际上是类域中的全局变量.所以,静态数据成员的定义(初始化)不应该被放在头文件中. 其定义方式与全局变量相同.举例如下: xxx.h文件 class base{ pr

C++中静态成员变量和静态成员函数(面向过程&amp;&amp;面向对象)

数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态          成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员  存在于内存,所以非静态成员可以直接访问类中静态的成员. 非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问..非静态成             员的生存期决定于该类的生存

类静态成员变量和静态成员函数的访问方式

1.在类所有实例中静态成员变量和静态成员函数都只有一份拷贝 2.静态成员函数不能调用非静态成员,非静态成员函数可以调用静态成员 3.静态成员变量在使用前要初始化 一.静态成员变量的访问 class B { public: static int a; }; int B::a=0;//必须要先初始化 int main(){ cout<<B::a<<endl; return 0; } 二.静态成员函数的访问 class B { public: static void a(){ print

mysqldump导出--数据+结构+(函数+存储过程)

mysqldump--导出工具 #导出某个数据库--结构+数据 shell>mysqldump -h192.168.161.124 -uroot -pxxxxxx --opt db_name |gzip -9 > /db_bakup/db_name.gz #导出某个数据库的表--结构+数据+函数+存储过程 shell>mysqldump -h192.168.161.124 -uroot -pxxxxxx --opt -R db_name |gzip -9 > /db_backup/