是 allowed/common 使用 getter 获取 "embedded" 变量或对象吗?
Is it allowed/common use to a getter for getting an "embedded" variable or object?
有些事情我一直想知道,我希望你们能就此事分享你的想法。大约半年前,当我编写一个由 PLC 控制的机器人时,我第一次发现了这个问题。在结构化文本中,我使用 get 函数 return 来自 class 的对象。这样我就可以对那个 class 的 member/variable 做任何我想做的事情(使用 getters 和 setter)。这为我节省了很多工作,因为我不必创建单独的函数来从更深的对象中获取某些东西。
目前我正在用 Qt C++ 编程,但我又遇到了这个问题。我不确定我现在是否完全清楚(我不是以英语为母语的人,也不擅长编码术语),所以我将尝试通过一个例子来说明这一点。
假设我有一个 array/vector,里面有 class 学校的多个对象。每个对象都有自己的 classes 数组(我的意思是 class 学生,而不是编程 class),每个 class 都有自己的学生数组,他们课程有姓名、学号、年龄等
现在我想得到一个随机学生的名字。在 Qt C++ 中,我会这样做:
QString randomName = schoolVector.at(randomNumber)->getClassVector().at(anotherRandomNumber)->getStudentVector().at(yetAgainARandomNumber)->getName();
你可以看到我对return某个class中的对象做了一些get-functions。这样一来,我就可以轻松地操作 class 中的对象或变量。
这就是我问这个问题的原因:这是要走的路吗?在学校里,他们教我 getters 和 setter 的使用很重要,这样你就不能在你不想或不想让其他人操作时操作变量。但是当我在 classVector 中使用 getter 到 return 一个 class 时,我仍然可以操纵其中的任何东西。
谁能告诉我常见的做法,以及使用 for 循环在向量中查找某个对象是否正常?非常感谢!
干杯,
马丁
据我了解,您希望能够以一种保留封装的方式访问(读取)对象。您可以通过定义一个 getter 来实现这一点,该 returns 是对内部对象的 const 引用,例如:
const std::vector<Class>& getClassVector() const { return class_vector; }
现在您可以访问底层对象而不能修改它。
顺便说一句,也许这是分裂的头发,你知道这一点,但 setters/getters 的实现并不完全正确,因此人们无法在你不希望他们修改基础变量时修改它们 - setter 可以随时调用并修改变量,您无法阻止。它们在那里,以便可以以受控方式执行任何修改(例如,通过检查要设置的值是否在您期望的范围内并处理不在范围内的情况,或者通过重新计算一些其他依赖于该值的变量您正在设置、切换对象的状态、防止可能的数据竞争等)。
有些事情我一直想知道,我希望你们能就此事分享你的想法。大约半年前,当我编写一个由 PLC 控制的机器人时,我第一次发现了这个问题。在结构化文本中,我使用 get 函数 return 来自 class 的对象。这样我就可以对那个 class 的 member/variable 做任何我想做的事情(使用 getters 和 setter)。这为我节省了很多工作,因为我不必创建单独的函数来从更深的对象中获取某些东西。
目前我正在用 Qt C++ 编程,但我又遇到了这个问题。我不确定我现在是否完全清楚(我不是以英语为母语的人,也不擅长编码术语),所以我将尝试通过一个例子来说明这一点。 假设我有一个 array/vector,里面有 class 学校的多个对象。每个对象都有自己的 classes 数组(我的意思是 class 学生,而不是编程 class),每个 class 都有自己的学生数组,他们课程有姓名、学号、年龄等
现在我想得到一个随机学生的名字。在 Qt C++ 中,我会这样做:
QString randomName = schoolVector.at(randomNumber)->getClassVector().at(anotherRandomNumber)->getStudentVector().at(yetAgainARandomNumber)->getName();
你可以看到我对return某个class中的对象做了一些get-functions。这样一来,我就可以轻松地操作 class 中的对象或变量。 这就是我问这个问题的原因:这是要走的路吗?在学校里,他们教我 getters 和 setter 的使用很重要,这样你就不能在你不想或不想让其他人操作时操作变量。但是当我在 classVector 中使用 getter 到 return 一个 class 时,我仍然可以操纵其中的任何东西。
谁能告诉我常见的做法,以及使用 for 循环在向量中查找某个对象是否正常?非常感谢!
干杯, 马丁
据我了解,您希望能够以一种保留封装的方式访问(读取)对象。您可以通过定义一个 getter 来实现这一点,该 returns 是对内部对象的 const 引用,例如:
const std::vector<Class>& getClassVector() const { return class_vector; }
现在您可以访问底层对象而不能修改它。
顺便说一句,也许这是分裂的头发,你知道这一点,但 setters/getters 的实现并不完全正确,因此人们无法在你不希望他们修改基础变量时修改它们 - setter 可以随时调用并修改变量,您无法阻止。它们在那里,以便可以以受控方式执行任何修改(例如,通过检查要设置的值是否在您期望的范围内并处理不在范围内的情况,或者通过重新计算一些其他依赖于该值的变量您正在设置、切换对象的状态、防止可能的数据竞争等)。