返回内部成员变量的指针
来源:互联网 发布:欧洲圣母 知乎 编辑:程序博客网 时间:2024/05/21 21:50
1. 不好的方法:
先看代码
#include <iostream>#include <cstring>using namespace std;const int CONTEXT_SZ=255;class Test{public:Test() { } ~Test() { }char *getContext();int setContext(const char *str);private:char sContext[CONTEXT_SZ];};char *Test::getContext(){return sContext;}int Test::setContext(const char *str){if(strlen(str)>CONTEXT_SZ)return -1;strcpy(sContext,str);return strlen(sContext);}int main(int argc,char **argv){Test t;t.setContext("xxt");cout<<"use setContext():"<<t.getContext()<<endl;strcpy(t.getContext(),"AAAAAAAAAAA");cout<<"use getContext() to change:"<<t.getContext()<<endl;return 0;}
不好的原因有二:char *getContext()1. 返回的是非常指针,其指向的内容可以被修改。2. 这里我们只需取得Context的内容,不想修改他,故应该为常函数。
因此这样比较好:
cosnt char* getContext() const
{
实现略
}
2. 比较好的方法
#include <iostream>#include <cstring>using namespace std;const int CONTEXT_SZ=255;class Test{public:Test() { } ~Test() { }const char *getContext() const; //加const限定符,不能改变类的成员变量,只能读取int setContext(const char *str);private:char sContext[CONTEXT_SZ];};const char *Test::getContext() const{return sContext;}int Test::setContext(const char *str){if(strlen(str)>CONTEXT_SZ)return -1;strcpy(sContext,str);return strlen(sContext);}int main(int argc,char **argv){Test t;t.setContext("xxt");cout<<"use setContext():"<<t.getContext()<<endl;//strcpy不再有效,不能复制串从char * 到const char *//strcpy(t.getContext(),"AAAAAAAAAAA");cout<<"use getContext() to change:"<<t.getContext()<<endl;return 0;}
总结:char *getContext();
改为 const char *getContext() const;
第一个const表示返回一个const指针,这样它函数不能作为左值,即不能赋值与它,而且它也只能被赋给一个const变量,这样它就不能更改,就只能进行赋值操作.
第二个const表示这是一个常量函数,不能修对象,一般get函数,都用const修饰,以防意外修改..
还可以把getContext()函数列入private中,作为私有成员函数,这样它就不能在外部修改了~~
- 返回内部成员变量的指针
- 返回内部成员变量的指针
- 返回类的私有指针成员变量的引用
- 类内部成员变量与局部成员变量的区别
- 返回内部静态成员的陷阱inet_ntoa()
- 返回指针变量的函数
- const类型的成员函数内部如何改变成员变量
- const类型的成员函数内部如何改变成员变量
- const类型的成员函数内部如何改变成员变量
- 可以返回函数内部定义的指针
- 类的成员变量偏移指针和成员函数指针
- 类的成员变量偏移指针和成员函数指针 .
- 类内部指针成员的管理--常规指针型行为
- 类内部指针成员的管理--智能指针
- c++ 全局的指针变量 和 成员指针变量 初始化
- 常成员函数返回指针的类型
- 成员变量/函数指针的用法
- 成员变量/函数指针的用法
- 还要影响到我在同学们心中的飞鸽传书
- linux “.xz” 文件解压需要先安装解压工具 xz
- C++Primer第三版习题0325
- MP4文件格式详解——文件类型ftyp
- Linux虚拟文件系统之文件打开(sys_open())
- 返回内部成员变量的指针
- 软件测试方法大汇总
- C语言练习之第二章
- mvc 3.0 自定义 AuthorizeAttribute 权限管理
- 缺陷管理(一)
- 齐次坐标的理解
- Hadoop Job Scheduling
- Android记住用户
- Linux虚拟文件系统之文件系统卸载(sys_umount())