gpt4 book ai didi

C++: setter和getter ?

转载 作者:太空狗 更新时间:2023-10-29 20:42:24 25 4
gpt4 key购买 nike

我正在尝试编写一些代码来为以下数据的 ID 号、名字、姓氏、期中分数和最终分数创建 getter 和 setter,这些数据位于我正在类的文本文件中写...

10601   ANDRES HYUN 88 91 94 94 89 84 94 84 89 87 89 91 
10611 THU ZECHER 83 79 89 87 88 88 86 81 84 80 89 81
10622 BEVERLEE WAMPOLE 95 92 91 96 99 97 99 89 94 96 90 97
10630 TRUMAN SOVIE 68 73 77 76 72 71 72 77 67 68 72 75

ID 是第一个数字,名字和姓氏不言自明,期中成绩是倒数第二个数字,最后一个数字是最终成绩。这是我第一次使用 getter 和 setter,到目前为止我已经......

int getID()const{return ID;}
void setID(int i) {ID=i}
string getFname()const{return Fname;}
void setFname(string f) {Fname = f}
string getLname()const{return Lname;}
void setLname(string l) {Lname = l}
int getMidterm()const{return Midterm;}
void setMidterm(int m) {Midterm=m}
int getFinal()const{return Final;}
void setFinal(int fl) {Final=fl}

我是否在正确的轨道上?另外,如何指定数据集中的第一个数字是ID,第一个字符串是名字,第二个字符串是第二个名字,倒数第二个数字是Midterm,最后一个数字是最终分数?

最佳答案

如果您问的是编写 getter 和 setter,是的,这就是很多人在做的事情。要为复杂类型编写“完美”访问器,您可以使用:

void setLname(const String& input) { Lname = input; }    //copies the string
void setLname(String&& input) { Lname = std::move(input); } //moves the string
const String& getLname() const { return Lname; } //allows to get a const String reference from a const object
String& getLname() { return Lname; } //allows modifying access to Lname if the object is not const.

请注意,这不仅仅是两个,人们通常会谈论,通常只看到一个 getter 和一个 setter。只有极少数人愿意写更多。然而,这四个中的每一个都有稍微不同的工作要做,可能建议添加。

但是,很多访问器都是一种代码味道:

  1. 他们用不提供任何抽象的函数散乱代码。

  2. 只要同时拥有 getter 和 setter,就可以不受限制地访问该数据成员;所以你也可以编写 public: String Lname

  3. 大量访问器是您建模数据而不是行为的特定标志。在这些情况下,您应该重新考虑您的设计,或者诚实地继续使用公共(public)成员,或者,如果所有成员都是公共(public)的,则使用 struct 恕我直言。

请注意,我在这里谈论的是纯粹的访问器,而不是那些实际上做一些明智的事情的访问器,比如检查值范围、相应地更新其他成员等等。而这些纯粹的是你应该避免的。

所以,如果我是你,我会问自己:我需要我的类(class)有哪些行为?我是否真的需要在其他代码中讨论它的所有数据成员,或者我能否找到我的类可以提供的合理抽象,这将使访问器变得无用?有没有可能我正在考虑为错误的对象类建模?还是我真的只想要一个可以随处使用和修改的数据容器?

关于C++: setter和getter ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18777452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com