各种成员变量初始化!
下面的成员变量的数据类型比较奇怪:
- 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;
}