C++ 的class中有没有类似于java中设置和取得类属性的set{}和get{}?

WiseNeuro 2005-06-02 12:11:35
java的class中有着两个过程,可以对变量进行合法性检查,不清楚c++中是否有类似的方法,请大家赐教。谢谢。
...全文
361 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
WiseNeuro 2005-06-08
  • 打赏
  • 举报
回复
Wolf0403(完美废人)(GNU's Neurotics' Utopian)的blog不错
baoguilv 2005-06-08
  • 打赏
  • 举报
回复
eric8231(1328cire) 有道理
mostideal 2005-06-03
  • 打赏
  • 举报
回复
mark!
ufxcom 2005-06-03
  • 打赏
  • 举报
回复
Wolf0403 2005-06-03
  • 打赏
  • 举报
回复
http://blog.csdn.net/Wolf0403/archive/2003/09/23/17138.aspx
小弟当年学 C# 时候的习作,模拟 C# 的 property,纯粹的 syntax sugar。。。
不知道 Java 的 get/set 有什么特殊的地方。
zdy_8212 2005-06-03
  • 打赏
  • 举报
回复
没有,一般在函式后面加Const来作为类似的功能模块。
eric8231 2005-06-02
  • 打赏
  • 举报
回复
> 没有吧,有必要那样吗!
> 直接赋值,取值公有成员多少简单啊,为什么非要用公有方法调用私有成员,

我认为这里主要有两个考虑:合法性检查 和 便于更新类的表示。 如果让使用类的用户代码直接操纵数据成员,那么严格来讲在所有使用的地方都要检查数据的合法性,或是做出不进行检查的决策。 并且,类的表示一旦发生的改变,那么所有相关的用户代码也必须进行相应地改变,通常会导致对这些代码的重新编译。

当然对于一些简单的,尤其是不属于某个类层次结构中的类而言,你可能会觉得这样很麻烦。在这种情况下,这些类甚至只用struct来声明就够了
foochow 2005-06-02
  • 打赏
  • 举报
回复
mark!!学习
WiseNeuro 2005-06-02
  • 打赏
  • 举报
回复
不错。这两个方法最大的好处在于完成数据的合法性检查,可以使代码更安全。
如果写的话该怎样写呢?如何重载"="?
假设有class:
clasee CClassA
{
public:
TypeName data ;
A(){} ;
~A(){};


};
我们需要使其中的data在被赋值时使用类似java中的set()来完成一些检查
和转换工作,是不是可以利用类的类型自动转换功能呢?即,添加一些构造函数。
可不可以这样书写类TypeName:
class TypeName
{
public:
Data property ;
TypeName(TypeName data)
{
....
Set(data) ;

}
TypeName() ;
.... //other construction functions.

private:
void Set(TypeName data)
{
//code for check data.property.
}

};
这样,当用如下代码对TypeName类型进行设置时,就会隐式调用合适的构造函数
完成检查工作:
//---------------
TypeName data = new TypeName() ;
data = data2 ; //data2 is object of TypeName. 隐式调用了
//构造函数 TypeName(TypeName)
//---------------
例如定义一个年龄
class CAge{
public:
int age ;
CAge(CAge ageData)
{
Set(ageData) ;
}
CAge(){}

private:
void Set(CAge ageData)
{
if(ageData.age > 120) //听说有人活到120岁,所以就把120做上限:)
{
age = 120 ;
}
else if(ageData.age < 1)
{
age = 1 ;
}
else
{
age = ageData.age
}
}

};
另外,也可以用重载“=”来实现,但我不是很清楚,对get的实现我想是不是只能用overload
"="来实现呢?

key20003 2005-06-02
  • 打赏
  • 举报
回复
没有吧,有必要那样吗!
直接赋值,取值公有成员多少简单啊,为什么非要用公有方法调用私有成员,这可是C++之父Bjarne Stroustrup说的,他认为那样做显得stiff,所有的对象思想并非一定要用个什么方法来包装成员。
foochow 2005-06-02
  • 打赏
  • 举报
回复
mark!!
whatsouta 2005-06-02
  • 打赏
  • 举报
回复
没有
fanofvc 2005-06-02
  • 打赏
  • 举报
回复
自己写呗。
cmoring 2005-06-02
  • 打赏
  • 举报
回复
标准C++没有属性,就没有这个概念。
key20003 2005-06-02
  • 打赏
  • 举报
回复
楼上说的更全面,强烈支持!
eric8231 2005-06-02
  • 打赏
  • 举报
回复
标准C++里没有 .NET的 MC++有
nasi00 2005-06-02
  • 打赏
  • 举报
回复
好像是木有,自己写呗

64,674

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧