二、c++类的成员初始化问题

(1)类里面的任何成员变量在定义时是不能初始化的。

         类的定义实际相当与类型声明,并没有分配存储空间,初始化的数据哪里放? 类实例化以后才会有实体存储地址及空间。当用类构造对象的时候首先分配内存然后调用构造函数,这时候才可以初始化非静态成员变量.
        静态成员变量定义的时候在静态存储区中就分配了内存所以可以初始化

(2)一般的数据成员可以在构造函数中初始化。(构造初始化列表初始化和构造函数体内赋值初始化)


(3)const数据成员必须在构造函数的初始化列表中初始化。(道理很简单,const成员第一次数据初始化就是发生在类构造数据初始化时,一旦过了此时就会出现问题)。

(4)static在类的定义外面初始化。   

(5)数组成员是不能在初始化列表里初始化的。

 

-----------------Test.h----------------------------
#pragma once

class Test
{
private :
    int   var1;
    //int var11= 4; 错误的初始化方法-2、成员变量在定义时不能初始化
    const    int var2 ;
    //const  int var22 =22222; 错误的初始化方法-3、const数据成员必须在构造函数的初始化列表中初始化
    static   int  var3;
    //static int var3333=33333; 错误-只有静态常量成员才能直接赋值来初始化
    static const int var4=4444; //正确,静态常量成员可以直接初始化
    static const int var44;
public:
    Test(void);
    ~Test(void);
};
--------------------Test.cpp-----------------------------------

#include ".\test.h"

int Test::var3 = 3333333; //正确-4、static可在类的定义外面初始化

//int Test::var1 = 11111; 错误-只有静态成员才能在类的外面初始化
Test::Test(void) :var1(11111),var2(22222)   //正确;但var3(33333) 不能在这里初始化
{
    var1 =11111;     //正确, 普通变量可以在这里初始化
    //var2 = 222222; 错误-3、const数据成员必须在构造函数的初始化列表中初始化
           
    var3 =44444;   //这个是赋值,值会影响到其它实例
}

Test::~Test(void)
{
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值