类成员变量初始化位置

来源:互联网 发布:mac 实用软件下载 编辑:程序博客网 时间:2024/05/18 03:26

转自:http://www.cnblogs.com/pangxiaodong/archive/2011/08/10/2133197.html

简述

类的成员变量多种多样,比如:int a, const int a, int &a, static int a, static const int a, statice int& a。前面三个分别是普通变量、const变量和引用变量,后面的三个是前面三个分别加上了static。本文主要分析这六种变量初始化的位置。

说明

对于int、const int和int&,这三个类型相对于static来说,每个对象都有一份,因此每个对象都要构造一次。其中,int的初始化不受限制,哪里都行。const int和int &要求在定义的时候初始化,因此,默认要求只能在初始化成员列表中进行。static int、static const int和static int&这三个类型,只要是加上了static,就是静态的,那么对于类来说就是唯一的,所有对象共用一个,那么就应该在在类文件中初始化,在其他任何地方初始化都不合适。有人可能会想,static const int,也是const能不能在初始化成员列表中初始化呢?不行,如果在初始化成员列表中初始化,那么每调用一次构造函数,就会重新初始化一次这个类型,而这个类型是static,不应该重复初始化,编译不过的,假设编译过了,那么这个类型也会多次被初始化,与const相悖。

代码

#include<iostream>using namespace std;class Test {  int a;              // 初始化位置:构造函数初始化成员列表,构造函数,其他函数  const int b;        // 初始化位置:构造函数初始化成员列表  int & c;            // 初始化位置:构造函数初始化成员列表  static int d;       // 初始化位置:类文件  static const int e; // 初始化位置:类文件  static int &f;      // 初始化位置:类文件public :    Test(int a,int b,int c):a(a),b(b),c(c) { }  // 构造函数初始化成员列表};int Test::d = 0;          // 类文件const int Test::e = 0;    // 类文件int& Test::f = Test::d;   // 类文件int main() {    Test test(1,2,3);    system("PAUSE");    return 0;}
0 0
原创粉丝点击