我正在尝试这个C ++教程。我是C ++编程的初学者。我不明白为什么他们在setValue
中使用getValue
和class Class1
而不是setClass1。在其他教程中,他们在课程setA
中使用getA
和class Class1
。以下是代码:
class Class1 {
int i;
public:
void setValue( int value ) { i = value; }
int getValue() { return i; }
};
第二个代码是:
class A{
int ia;
public:// accessor method because they are used to access a private date member
void setA ( const int a);
int getA ()const;
int getA ();
};
请帮忙......
答案 0 :(得分:1)
名称是任意的,你可以使用你想要的任何函数名称(当然,这取决于语言规则)。
但是,虽然可以使用xyzzy()
和plugh()
作为getter和setter,但这并不是一个好主意。
您应该使用表示通话意图的内容,例如getTemperature()
或setVelocity()
。而且这些甚至不必将一对一映射到内部字段,因为封装意味着不应暴露内部细节。
由此,我的意思是,即使内部字段存储为开尔文,您也可能有一个getTemperatureC()
来返回摄氏温度:
double getTemperatureC(void) { return kelvins - 273.15; }
void setTemperatureC(double t) { kelvins = t + 273.15; }
(或者getter / setter可能使用任意复杂的计算)。
使用getA()
创建类A
可能会在创建类B
以从A
继承时遇到麻烦,但这超出了语言的范围。但是遵循上面的指导方针是很好的编程习惯(函数应该表明意图而不是内部)。
答案 1 :(得分:1)
我很困惑为什么他们在get中使用相同的名称并使用类名设置,并在另一个类上使用不同的get和set名称。 set和get名称是否会影响代码?
答案是否。
getter
和setter
通常在课程中称为accessor
和mutators
。它们只是根据某些约定命名的成员函数,对于阅读代码以理解这些函数的目的的人来说很容易,因此如果您尝试访问这些函数,那么将这些成员函数命名为get
就像常识一样。成员变量,如果您尝试更改某些成员变量,则以set
开头。名称可以是任何有效的标识符。
因此setValue
或setA
只是这些成员函数的标识符。它不会影响代码。
同时,不同的类可以具有相同的命名getter或setter,因为这些函数名称在不同的类范围内。