Bob*_*Bob 3 c++ class file 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
Run Code Online (Sandbox Code Playgroud)
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}
Run Code Online (Sandbox Code Playgroud)
我完全走对了吗?另外,如何指定数据集中的第一个数字是ID,第一个字符串是名字,第二个字符串第二个名字,倒数第二个数字是Midterm,最后一个数字是最终分数?
如果您要编写吸气剂和吸气剂,是的,这是有多少人这样做。要将“完美”访问器写入复杂类型,可以使用以下命令:
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.
Run Code Online (Sandbox Code Playgroud)
请注意,这不仅仅是人们通常谈论的两个,而且通常只会看到一个吸气剂和一个吸气器。只有很少的人愿意写更多的东西。但是,这四个工作都有一点不同,可能建议增加。
但是,许多访问器都有代码味道:
他们用不提供任何抽象的函数来乱码。
只要您同时拥有一个getter和setter,就实质上可以不受限制地访问该数据成员。所以你也可以写public: String Lname。
许多访问者都表明您正在建模数据,而不是行为。在这种情况下,您应该重新考虑您的设计,或者说实话并继续使用公共成员,或者,如果所有成员都是公共成员,则使用struct恕我直言。
请注意,我在这里谈论的是纯粹的访问器,而不是实际执行明智操作的访问器,例如检查值范围,相应地更新其他成员,等等。而这些纯洁的东西是您应该避免的。
所以,如果我是你,我会问自己:班上我需要什么行为?我是否真的需要在其他代码中讨论其所有数据成员,还是可以找到我的类可以提供的明智抽象,从而使访问器无用?我是否可能正在考虑为错误的对象类建模?还是我真的只是想要一个可以在任何地方使用和修改我的数据的容器?