类中的const变量的初始化
来源:互联网 发布:电脑怎么用手机的网络 编辑:程序博客网 时间:2024/04/30 04:23
我们知道在c++中const定义的变量一般是不分配内存的,和c语言中的#define。但是在c语言中const是默认分配的。
但是当我们的类中有const定义的数据时候,一般是要进行内存分配的。因为在const定义的变量一般是进行初始化操作的。不然就会报错。那什么时候对类中定义的变量进行初始化呢?
在类中定义const变量有以下两个好处:
1.静态数据成员没有进入程序的全局名字空间,因此不存在与程序中的其他全局名字冲突的可能性。
2.可以实现信息的隐藏。
#include<iostream>using namespace std;class sb{private:const int i=5;public:void print();};void sb::print(){cout<<i<<endl;}int main(){cout<<"sizeof class sb="<<sizeof(sb)<<endl;sb sb1;sb1.print();return 0;}
上面的代码和下面的代码是一样的。下面的代码还节约内存
#include<iostream>using namespace std;class sb{public:void print();};void sb::print(){cout<<5<<endl;}int main(){cout<<"sizeof class sb="<<sizeof(sb)<<endl;sb sb1;sb1.print();return 0;}
所以上面在类中直接定义是没有意义的。我们知道在类创立的时候我们最先执行的就是构造函数。但是是在构造函数中定义?这个也是错误的必须在构造函数体执行之前定义的,也就是在函数调用列表中定义的。具体如下
#include<iostream>using namespace std;class sb{private:const int i;public:sb(int ii);void print();};sb::sb(int ii):i(ii){}void sb::print(){cout<<i<<endl;}int main(){sb sb1(1);cout<<"sizeof class sb="<<sizeof(sb)<<endl;sb1.print();return 0;}
而上文中的
sb::sb(int ii):i(ii){}
如果改为
sb::sb(int ii){i=ii;}则会报错的。
0 0
- 类中的const变量的初始化
- const型类成员变量的初始化
- C语言中的const变量初始化
- 类的const成员变量、static const、static成员变量的初始化
- 类的const成员变量、static const、static成员变量的初始化
- 类中静态变量与const常量成员的初始化
- 类中静态变量与const常量成员的初始化
- static const 型成员变量的初始化
- C++中const成员变量的初始化
- c++类中const static变量初始化
- C++类const成员变量初始化
- 类中const类型变量初始化
- const static const static成员变量的初始化
- 对象的初始化列表const变量的初始化
- 类的const变员变量和static成员变量的初始化总结
- 类内const static(static const)成员变量初始化问题
- c++类中static、const、static const成员变量初始化
- c++类中const/static/const static成员变量初始化
- JavaWeb项目连接Access数据库
- open()—打开文件函数
- 单例模式辨析
- 设计模式之观察者
- c++中数组名与函数的区别
- 类中的const变量的初始化
- C++primer plus第六版课后编程题答案9.4
- 通过excel实现对多个资源文件的集中管理
- 获取进程模块的信息
- Subsets
- 函数的重载
- 解决com.sun.tools.javac.Main is not on the classpath的问题
- [LeetCode] Reverse Integer
- Android复习之RatingBar