C++类成员初始化

 

经常碰到这类问题,以前也记录过,不过都留在原公司拿不出来,现在再记录一些基本的知识,以备不时之需。

c++各种不同类型成员初始化总结,可以初始化的情况有如下四个地方:

1、在类的定义中进行的,只有const 且 static 且 integral 的变量(还得看编译器是否支持,VC6.0就不支持)。

2、在类的构造函数初始化列表中, 包括const对象和Reference对象。

3、在类的定义之外初始化的,包括static变量。因为它是属于类的唯一变量。

4、普通的变量可以在构造函数的内部,通过赋值方式进行。当然这样效率不高。

 

//-----------------Static.h----------------------------

 

#pragma once

 

class Test

{

private :

       int   var1;

       //  int   var11 = 11; 错误的初始化方法

      

       const int   var2 ;

       //  const int   var22 = 22222; 错误的初始化方法

      

       static int   var3;

       //  static int   var33 = 33333; 错误,只有静态常量成员才能直接赋值来初始化

      

       //     static const int   var4 = 4444; //正确,静态常量成员可以直接初始化,因编译器不同吧,VC6.0就不行。

       static const int   var44;

      

       int& var5;       // 引用型成员变量

      

public:

       Test(void);

};

 

//--------------------Static.cpp-----------------------------------

 

#include "Static.h"

 

//    int Test::var1 = 1;; 错误 静态成员才能初始化

//    int Test::var2 = 2; 错误

//    int Test::var44 = 4; // 错误的方法,提示重定义

 

int Test::var3 = 3; //静态成员的 正确的初始化方法

 

const int Test::var44 = 44;     // 正确的初始化方式

 

Test::Test(void)

: var1(1)

, var2(2)   //正确的初始化方法 , var3(3) 不能在这里初始化

, var5(var1)

{

       var1 = 1; //正确, 普通变量也可以在这里初始化

      

       //  var2 = 2; 错误,因为常量不能赋值,只能在 “constructor initializer (构造函数的初始化列表)” 那里初始化

      

       var3 = 3;   //这个赋值时正确的,不过因为所有对象一个静态成员,所以会影响到其他的,这不能叫做初始化了吧

      

       //     var5 = var1;    // 错误,引用型成员变量只能在构造函数初始化列表中初始化

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值