+ -
当前位置:首页 → 问答吧 → 如何让类成员具有只读属性

如何让类成员具有只读属性

时间:2011-12-28

来源:互联网

想在类中定义若干属性,这些属性是只读的,在构造函数中或专门的工作中对这些属性赋值,在程序中只能读取这些属性,比如用‘。’操作符来读取。我定义成private或protect,都不能实现‘。’操作符直接访问的目的,要如何做呢?

作者: wang_daiwoo   发布时间: 2011-12-28

一定要用.直接访问么?
如不是,把变量设置成private或protect,然后用函数封装一下就可以了,调用时调用封装函数即可,这样很简单就做到你想要的了

作者: nice_cxf   发布时间: 2011-12-28

不要纠结各种常量和只读属性了,这个世界上唯一不变的就是变化。
用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量和只读属性呢!

作者: zhao4zhong1   发布时间: 2011-12-28

如果在构造函数中赋值 那只需要使用const就OK了 
不过我估计你会问出这样的问题 应该也不知道如果用构造函数给const成员变量赋值~
好好的踏踏实实的 一步一步的看书吧

作者: jgyh1987   发布时间: 2011-12-28

引用 2 楼 zhao4zhong1 的回复:
不要纠结各种常量和只读属性了,这个世界上唯一不变的就是变化。
用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量和只读属性呢!

呵呵,赵老师你说的话,往往来这里问问题的新手是看不懂的。

作者: mymixing   发布时间: 2011-12-28

在public中定义函数来访问。比如private中有个int m_Width;
那么在public中定义个函数
int getWidth()
{
return m_Width;
}

作者: pathletboy   发布时间: 2011-12-28

如果不考虑兼容性的话, 在 VC 里可以直接使用 __declspec( property( get=get_func_name ) ) declarator
这个扩展来做.

作者: adlay   发布时间: 2011-12-28

定义成常量,然后在定义一个指针指向这个常量
C/C++ code

#include <iostream>

class foo
{
public:
    const int var;
private:
    int * p;
public:
    foo():var(1)
    {
        p = (int *)&var;
    }
    void set(int v)
    {
        *p = v;
    }

};
using namespace std;
int main()
{
    foo o;
    //o.val = 2;
    o.set(2);
    cout<<o.var<<endl;
}

作者: hengyu654   发布时间: 2011-12-28

如果想只读,的确可以通过定义成常量来解决。 参考
http://www.cppblog.com/softgamer/archive/2007/02/09/18588.html

但是如果想内部读写,外部只读的话,c++没有这样的语法糖。还是得声明成protected,然后自己定义一个getter函数让外部调用。运算符重载可能会让这个操作更加方便。

作者: xulai1001   发布时间: 2011-12-28

热门下载

更多