文档主要来自:http://blog.csdn.net/yjkwf/article/details/6067267

1. static类型

  1. 用static可以为类类型的所有对象所共有,像是全局对象,但又被约束在类类型的名字空间中。static定义的静态常量在函数执行后不会释放其存储空间。
  2. 可以实施封装,将其放在private或protected区域中。
  3. static成员没有this指针,它不是任何一个对象的组成部分,推荐用“类名::static成员名调用”。
  4. static成员函数声明时应写明static关键字,在定义时不能加static关键字。
  5. static数据成员声明时应写明static关键字,在定义时不能加static关键字。
  6. static成员函数不能使用const以修饰其不改变成员属性。
  7. static成员函数不能使用virtual以修饰其虚拟性。
  8. static const数据成员可以在类中声明并且初始化,然后在类定义之外再次进行定义;或者在类中声明,但在类定义外进行定义。非const的static数据成员仅能在类中声明,并在类定义之外进行定义。
  9. static成员函数主要目的是作为类作用域的全局函数。不能访问类的非静态数据成员。类的静态成员函数没有this指针,这导致:1、不能直接存取类的非静态成员变量,调用非静态成员函数2、不能被声明为virtual

2. const类型

  1. const定义的常量在超出其作用域之后其空间会被释放,const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。所以不能在类的声明中初始化const数据成员,因为类的对象没被创建时,编译器不知道const数据成员的值是什么。
  2. const数据成员的初始化只能在类的构造函数的初始化列表中进行。要想建立在整个类中都恒定的常量,应该用类中的枚举常量来实现,或者static cosnt。
  3. cosnt成员函数主要目的是防止成员函数修改对象的内容。即const成员函数不能修改成员变量的值,但可以访问成员变量。当方法成员函数时,该函数只能是const成员函数。

3. 引用类型

  1. 引用不能为 NULL
  2. 引用永远合法
  3. 引用的指向只能初始化,不能修改其指向,但可修改其指向的变量的值
  4. 引用不是变量,本身并不占用任何存储空间

4. static 、 const及引用类型的类属性的声明及定义

#include <iostream>  

using namespace std;  

class A
{
public:
A(int a);
   A();
static void print();//静态成员函数
private:
static int aa;//静态数据成员的声明
    //static int cc = 1; //不允许在类中定义非const型的static变量,编译出错
static const int count;//常量静态数据成员
const int bb;//常量数据成员
   static const int count1 = 1; //常量静态数据成员(在类中定义,但必须在类定义外再次定义)
}; int A::aa=0;//静态成员的定义
const int A::count=25;//静态常量成员定义
const int A::count1; //已在类中进行定义,此处还需再次定义,但可不赋值 //非静态的const成员需在初始化列表中进行初始化
A::A():bb(0){ //大括号不可省略,否则编译出错
} A::A(int a):bb(a)//常量成员的初始化
{
aa+=1;
} //静态成员函数仅能访问静态的成员变量,不可访问非静态成员变量
void A::print()
{
cout << "count = " << count << endl;
cout << "count1 = " << count1 << endl;
cout << "aa = " << aa << endl;
} class B{
public:
  B(int &var);
  void modify_g(int &var);
  int get_g();
private:
  int &g;
}; //因为引用类型的变量不可为空,所以必须使用参数来对引用类型变量进行初始化。默认构造函数也就不可初始化引用类型变量了
B::B(int &var):g(var){
} void B::modify_g(int &var){
  g = var;
} int B::get_g(){
  return g;
} //为保证C++文件的可移植,main的正确写法只有两种:int main()或int main(int argc, char *argv[])
int main()
{
A a(10);
A::print();//通过类访问静态成员函数
a.print();//通过对象访问静态成员函数
  
   A a1;
    A::print();
    a1.print();     int var = 2;
    B b(var);
    cout << "b.g = " << b.get_g() << endl;
    b.modify_g(10);
    cout << "b.g = " << b.get_g() << endl;
    cout << "var = " << var << endl; //此时var的值由2变为10
    
    return 0;
}

【转】C++ 类中的static,const,及引用类型的初始化的更多相关文章

  1. C++类中的static数据成员,static成员函数

    C++类中谈到static,我们可以在类中定义static成员,static成员函数!C++primer里面讲过:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在, ...

  2. C++ 类中的static成员的初始化和特点

    C++ 类中的static成员的初始化和特点 #include <iostream> using namespace std; class Test { public: Test() : ...

  3. cc31a_demo--CppPrimer_静态成员与继承-在派生类中访问基类中的static成员的方法

    //*基类中的static成员,在整个继承层次中只有一个实例 //*在派生类中访问基类中的static成员的方法 //1.基类名::成员名 //2.子类名::成员名 //3.对象.成员名 //4.指针 ...

  4. (转) C++ static、const和static const 以及它们的初始化

    const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. static表示的是静态的.类的静态成员函数.静态成员变量是和类相关的,而不是和类的 ...

  5. C++ static、const和static const 以及它们的初始化

    转自C++ static.const和static const 以及它们的初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. s ...

  6. (转 )C++ static、const和static const 以及它们的初始化

    const定义的常量在函数执行之后其空间会被释放,而static定义的静态常量在函数执行后不会被释放其空间.但不论是Const还是static  他们定义的内容都会随着程序的结束而被系统清楚. sta ...

  7. c++:类中的static成员

    首先静态成员可以是public的,也可以是private的,只需在一般的变量.函数声明语句前加上static关键字即可声明一个static变量. 类中的静态成员存在与任何对象之外,所有该类对象的共享一 ...

  8. C++类中的Static关键字二

    静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问,而静态成员函数可不建立对象就可以被使用.   或者说静态函数与一般函数没有太大的区别,只是访问有限制,静态变量跟一般的全局变量的区别 ...

  9. C++类中的Static关键字

    静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问,而静态成员函数可不建立对象就可以被使用.   或者说静态函数与一般函数没有太大的区别,只是访问有限制,静态变量跟一般的全局变量的区别 ...

随机推荐

  1. HTTP错误代码详细介绍

    HTTP 400 - 请求无效 HTTP 401.1 - 未授权:登录失败 HTTP 401.2 - 未授权:服务器配置问题导致登录失败 HTTP 401.3 - ACL 禁止访问资源 HTTP 40 ...

  2. linux下查看机器的硬件信息:

    查看CPU信息(型号) # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c       8  Intel(R) Xeon(R) CPU    ...

  3. 【洛谷P2927 [USACO08DEC]拼图游戏Jigsaw Puzzles】深搜

    其实,随便搜了一搜就可以AC了!!! - - 亏我纠结了这么久= = #include<cstdio> #include<cstdlib> #include<cstrin ...

  4. 一些简单的问题. 2的10次方与k (涉及到b k m的要用乘来解读)

    2的10次方是k k就表示2的10次方 2的16次方,解读为 2的6次方(64)*2的10次方(k)  简写为64k    64k=64*k 同理2的20次方  解读为2的10次方*2的10次方  k ...

  5. [状压dp]HDOJ4539 郑厂长系列故事——排兵布阵

    中文题,题意不再赘述 对于“?”这一格,它所能攻击到的(曼哈顿距离为2的) 前方的 即“√”的四个位置 那么与此格有关的即它前方两行(即状压这两行) 首先预处理每行能满足的: i 和(i<< ...

  6. [codility]tree_height

    http://codility.com/demo/take-sample-test/treeheight 非常非常简单的求树的深度.不忍直视. // you can also use includes ...

  7. C​+​+​构​造​函​数​,​复​制​构​造​函​数​和​析​构​函​数​专​题

    链接:http://wenku.baidu.com/view/d9316c0e52ea551810a6872a.html 本文作者:黄邦勇帅本文是学习 C++中的最基本的内容,因此学习 C++就应全部 ...

  8. function(a)

    问题:  问个初级的问题int a = 8;function(a);这里在function中的a值是引用a内存中的数据,还是新开辟内存后将a的值赋值到新内存供函数调用.  回答: int a = 8; ...

  9. 【HDOJ】2430 Beans

    这题目用线段树超时了,其实也差不多应该超时.10^6大数据量.看了一下网上的解法是单调队列.大概了解了一下,是个挺有意思的数据结构.首先,需要求满足0<=(S[r]-S[l])%p<=k时 ...

  10. 采用软件nginx实现web服务器集群

    nginx:软件负载均衡器  是高并发量http/反向代理服务器.实现windows下IIS的负载均衡 条件:2台服务器 1.cpu:Inter(R) 酷睿 i5 cpu 2.26GHz 内存:2G ...