c++的类中set get函数有什麽作用
展开全部
get/set成员函数(访问级别通常为public)使得client端用户代码可以访问对象的内部数据结构,这会暴露类内部的实现细节。这种暴露使会得用户代码与类实现之间产生深层次的依赖关系,而这种过剩的知识将在类实现技术改变时迅速破坏相关的用户代码---涟漪效果。
比如Container类输出了关于实现该类之二叉树的信息(比如,当它输出成员函数getLeftChild()与getRightChild()时),用户将被迫按照二叉树而不是容器进行思考,这将使用户代码变得复杂且难以改变。如果Container类改变了实现结构,则用户代码将被迫进行修改(可能是大量的)。
最少知识(least knowledge)原则是用于面向对象编码中降低类间耦合度的指导原则。该原则认为如果要在相互调用的类(对象)之间保持较低的耦合度,则一个对象所调用的方法应该仅仅局限于以下几个来源:
类对象本身;
被当作方法的参数而传递进来的对象;
此方法所创建或实例化的任何对象;
对象的任何组件;
一个对象可以任意调用以上四类对象的方法。唯一一类不可调用的方法来源于:通过某个对象的get成员函数所获取的间接对象的成员函数。很容易想象,当某个类拥有大量get/set成员函数时,该类本身几乎不可能提供完善的逻辑处理方法(否则也就没有必要提供这些get/set成员函数了),因此借助get成员函数获取间接对象并做进一步的处理几乎是不可避免的。
因此,在有可能的情况下,类设计人员应该尽量不提供get与set成员函数。
当然,不要认为get与set成员函数总是坏的,像CORBA这样的框架都会为所有的属性自动提供get/set成员函数。真正的问题是:好的对象总会封装并在接口后面隐藏某些东西,然而get/set成员函数有时会在暗中暴露对象的秘密。只有当在类外(从用户的角度)看待这些私有数据仍“有意义”时,为私有数据设置公有的get()和set()成员函数才是合理的。然而在许多情况下, get()/set()成员函数和公有数据一样差劲:它们仅仅隐藏了私有数据的名称,而没有隐藏私有数据本身。
比如Container类输出了关于实现该类之二叉树的信息(比如,当它输出成员函数getLeftChild()与getRightChild()时),用户将被迫按照二叉树而不是容器进行思考,这将使用户代码变得复杂且难以改变。如果Container类改变了实现结构,则用户代码将被迫进行修改(可能是大量的)。
最少知识(least knowledge)原则是用于面向对象编码中降低类间耦合度的指导原则。该原则认为如果要在相互调用的类(对象)之间保持较低的耦合度,则一个对象所调用的方法应该仅仅局限于以下几个来源:
类对象本身;
被当作方法的参数而传递进来的对象;
此方法所创建或实例化的任何对象;
对象的任何组件;
一个对象可以任意调用以上四类对象的方法。唯一一类不可调用的方法来源于:通过某个对象的get成员函数所获取的间接对象的成员函数。很容易想象,当某个类拥有大量get/set成员函数时,该类本身几乎不可能提供完善的逻辑处理方法(否则也就没有必要提供这些get/set成员函数了),因此借助get成员函数获取间接对象并做进一步的处理几乎是不可避免的。
因此,在有可能的情况下,类设计人员应该尽量不提供get与set成员函数。
当然,不要认为get与set成员函数总是坏的,像CORBA这样的框架都会为所有的属性自动提供get/set成员函数。真正的问题是:好的对象总会封装并在接口后面隐藏某些东西,然而get/set成员函数有时会在暗中暴露对象的秘密。只有当在类外(从用户的角度)看待这些私有数据仍“有意义”时,为私有数据设置公有的get()和set()成员函数才是合理的。然而在许多情况下, get()/set()成员函数和公有数据一样差劲:它们仅仅隐藏了私有数据的名称,而没有隐藏私有数据本身。
展开全部
set是向一个类中的属性中赋值,get则是取出该类的某属性的值,return
返回的值并不是为了输出到操作平台上,而是进行其他处理或进行运算来用于其他目的
比如一类中i的属性值为3,那么我们可以用geti()这个方法取到3这个值,再用于其他运算:
int
k=5*object.geti();
返回的值并不是为了输出到操作平台上,而是进行其他处理或进行运算来用于其他目的
比如一类中i的属性值为3,那么我们可以用geti()这个方法取到3这个值,再用于其他运算:
int
k=5*object.geti();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两年前玩过一会C++
如果我没记错的话,set、get是访问私有变量的方法。
为了安全性,Class中的属性一般设置为私有的private,但是为了给外界开放一个有限的可以访问私有变量的方法,就需要有setter,getter。setter、getter是标准的写法,也可以写成别的...
如果我没记错的话,set、get是访问私有变量的方法。
为了安全性,Class中的属性一般设置为私有的private,但是为了给外界开放一个有限的可以访问私有变量的方法,就需要有setter,getter。setter、getter是标准的写法,也可以写成别的...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |