C++类成员变量赋值,C语言中的变量如何定义和赋初值?
你知道C成员变量的初始化和赋值吗?坑很多,很多细节我也不清楚。
今天写类的时候,类的一个成员变量是引用,所以初始化有问题。检查后发现,原引用的初始化和const常量一样,只能在构造函数的初始化列表中初始化。当我突然发现我的C基础本科,我学到的东西需要重温。
至于为什么在成员变量中使用reference,这主要是因为成员变量是另一个类的对象,但是类禁止复制【如何禁止复制构造函数?其实很简单,声明为私有即可】。
评论:
在C++标准中(除了C++11版以后),类的成员变量的初始化是在构造函数中实现的,但是不能在类中设置默认值。其中,有三种特殊类型的成员变量,分别是静态类型成员变量、const常量类型成员变量和引用类型成员变量。
1.引用的初始化和const常量一样,只能在构造函数的初始化列表中初始化。
2.静态类型成员变量只能在类外部定义和初始化。
#包括iostream
#包含字符串
使用命名空间std
类别测试变量{
公共:
TestVar():b(2),e(a)
{
a=1;
cout a b c d e f h endl
}
//私有:
公共:
//int a=0;//错误:ISO C禁止初始化成员“a”
int a;//初始化可以在构造函数或初始化列表中
//const int b=0;//错误:ISO C禁止初始化成员“a”
const int b;//常数的正确初始化应该使用[构造函数的初始化列表]
Int //引用类型变量和常量一样,只能在构造函数的初始化列表中,参数是同一类型的变量。
//static int c=0;//ISO C禁止非常数静态成员“C”的类内初始化
静态int c;
静态常数int d=4;//注意只能使用整数数据[int.char]
静态const char f= a//是的,char也是整数数据
静态常数double h=9.9//书上说没有,但是g下还可以,和根编译器有关吗?
};
int TestVar:c=3;//更正静态成员的初始化方法
int main()
{
TestVar t;
t.a
cout t . a t . e endl;
返回0;
}运行结果:
将构造函数修改为:
公共:
TestVar():b(2),e(a)
{
cout a b c d e f h endl
a=1;
}运行结果:
根据上面的比较,发现构造函数的初始化列表最早运行在构造函数体运行之前。
此时B赋值为2,变量A没有初始化为随机值4197184,E是对A的引用,所以E的值也是4197184。
补充:
#包括iostream
#包含字符串
使用命名空间std
类别测试变量{
公共:
TestVar():b(2),e(a) //const,
{
a=1;
//c=99;
/*静态常数*/
静态常数int d=4;
静态常数double h=9.9
静态const char f= a
cout a b c d e f h endl
}
//私有:
公共:
//int a=0;//错误:ISO C禁止初始化成员“a”
int a;//初始化可以在构造函数或初始化列表中
//const int b=0;//错误:ISO C禁止初始化成员b
const int b;//常数的正确初始化应该使用[构造函数的初始化列表]
//static int c=0;//ISO C禁止非常数静态成员“C”的类内初始化
静态int c;
//静态const int d=4;//注意只能使用整数数据[int.char]
Int //引用类型变量和常量一样,只能在构造函数的初始化列表中,参数是同一类型的变量。
//静态const char f= a//是的,char也是整数数据
//静态const double h=9.9
};
int TestVar:c=3;//更正静态成员的初始化方法
int main()
{
TestVar t;
t.a
cout t . a t . e endl;
返回0;
}运行结果:
转载请联系作者授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。