cpp:各种成员变量的初始化

各种成员变量初始化!

下面的成员变量的数据类型比较奇怪:

  • a. 常量型成员变量
  • b. 引用型成员变量
  • c. 静态成员变量
  • d. 整型静态常量成员变量
  • e. 非整型静态常量成员变量

所以我们就一一的来看:

在头文件里我们对成员变量做了最大限度的初始化,能指定初始值的就指定了。

//--------testVar.h---------
#pragma once
class testVar
{
public:
    int var = 4;
    int var1;

    //常量必须提供初始值或列表初始化
    const int cVar = 10;
    const int cVar1;  //必须列表初始化

    //静态不能类内初始化
    static int sVar;


    //静态常量整数可以类内赋值
    static const int scVar = 5;
    const static int csVar = 4;

    //非整数静态常量不可以,必须类外赋值
    static const float scfVar;
    const static float csfVar;

    //如果列表初始化为var下面的var1的赋值就会被抛弃。
    int& rVar = var1;  //也可不列表初始化,如果像下面列表初始化,var1的赋值会被抛弃!
    int& rVar1;  //必须列表初始化

    //列表初始化后上面的赋值就会被抛弃
    testVar() :rVar(var),cVar1(2),rVar1(var) {}; 

};
//--------testVal.cpp--------
#include "testVar.h"

int testVar::sVar = 1;

const float testVar::csfVar = 2.4f;

// const static float testVar::csfVar = 2.4f;是错误的,不能声明static储存类

//-------test.cpp---------
#include <iostream>
#include"testVar.h"

//注意可能引发的重定义错误,应该像scfVar那样定义在testVar.cpp,头文件也可能重定义。
const float testVar::scfVar = 2.5f;

int main()
{
    testVar::sVar = 2;

    //下面是错误的,引用必须有初始值!
    // int& refer;

    //下面是不合法的,不可修改的左值
    //const float testVar::scfVar = 2.5f;
    

    testVar test1;
    testVar test2;

    //如果不提供构造函数就会报错:必须初始化const对象。
    const testVar ctest1;

    std::cout << "test1:" << std::endl;
    std::cout << test1.cVar << std::endl;
    std::cout << test1.var << std::endl;
    std::cout << test1.sVar << std::endl;

    std::cout << test1.var1 << std::endl;
    std::cout << test1.rVar << std::endl;

    std::cout << test1.scVar << std::endl;
    std::cout << test1.csVar << std::endl;

    std::cout << test1.csfVar << std::endl;
    std::cout << test1.scfVar << std::endl;



    std::cout << "test2:" << std::endl;
    std::cout << test2.cVar << std::endl;
    std::cout << test2.var << std::endl;
    std::cout << test2.sVar << std::endl;

    std::cout << test2.var1 << std::endl;
    std::cout << test2.rVar << std::endl;

    std::cout << test2.scVar << std::endl;
    std::cout << test2.csVar << std::endl;

    std::cout << test2.csfVar << std::endl;
    std::cout << test2.scfVar << std::endl;


    std::cout << "const test2:" << std::endl;
    std::cout << ctest1.cVar << std::endl;
    std::cout << ctest1.var << std::endl;
    std::cout << ctest1.sVar << std::endl;

    std::cout << ctest1.var1 << std::endl;
    std::cout << ctest1.rVar << std::endl;

    std::cout << ctest1.scVar << std::endl;
    std::cout << ctest1.csVar << std::endl;

    std::cout << ctest1.csfVar << std::endl;
    std::cout << ctest1.scfVar << std::endl;
}

奇怪的报错

//---------testVar.h--------
#pragma once
class testVar
{
public:
  
    int var;
    const int cVar = 10;  
    int& rVar = var;
	//使用default会报错:ctest1:必须初始化cosnt对象
    //testVar() = default;

	testVar(){}; //这个就不会报错!
    
};
//---------test.cpp------
#include"testVar.h"


int main()
{
    testVar test1;
    const testVar ctest1;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值