其他分享
首页 > 其他分享> > C:吸气者和塞特犬?

C:吸气者和塞特犬?

作者:互联网

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

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时,你对该数据成员的访问基本上是无限制的;所以你也可以写公共:String Lname.
>许多访问者都是您建模数据的一个标志,而不是行为.在这些情况下,您应该重新考虑您的设计,或者诚实并继续使用公共成员,或者,如果所有成员都是公开的,则使用结构恕我直言.

请注意,我在这里谈的是纯粹的访问者,而不是实际做一些合理的事情,比如检查一个值范围,相应地更新其他成员,等等.而这些纯粹的是你应该避免的.

所以,如果我是你,我会问自己:我的班级需要什么样的行为?我是否真的需要在其他代码中讨论其所有数据成员,或者我是否可以找到我的课程可以提供的合理抽象,这会使访问者无用?我是否可能正在考虑对错误的对象类进行建模?或者我真的只想要一个可以在任何地方使用和修改的数据容器?

标签:c,class,file,getter-setter
来源: https://codeday.me/bug/20190831/1776442.html