-1

我正在尝试做这个 C++ 教程。我是 C++ 编程的初学者。我不明白他们为什么使用setValueand getValueinclass Class1而不是 setClass1。在他们使用的另一个教程setAgetA课堂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 ();
};

请帮忙...

4

2 回答 2

1

名称是任意的,您可以使用任何您想要的函数名称(当然要遵守语言规则)。

但是,尽管您可以使用xyzzy()andplugh()作为 getter 和 setter,但这并不是一个好主意。

您应该使用指示呼叫意图的内容,例如getTemperature()or setVelocity()。而且这些甚至不必一对一地映射到内部字段,因为封装意味着不应该暴露内部细节。

我的意思是,getTemperatureC()即使内部字段存储为开尔文,您也可以返回摄氏温度:

double getTemperatureC(void)     { return kelvins - 273.15; }
void   setTemperatureC(double t) { kelvins = t + 273.15; }

(或者 getter/setter 可以使用任意复杂的计算)。

当您创建要继承的类时,使用getA()A可能会给您带来麻烦,但这超出了语言的范围。但是遵循上面的指南是一种很好的编程实践(函数应该表明意图而不是内部)。BA

于 2013-04-24T01:31:41.627 回答
1

我很困惑为什么他们在 get 和 set 中使用与类名相同的名称,而在另一个类上使用不同的 get 和 set 名称。set 和 get 名称会影响代码吗?

答案是否定的

getter并且setter通常被称为accessormutators在一个类中。它们只是根据某种约定命名的成员函数,便于阅读代码的人理解这些函数的用途,因此get如果您尝试访问成员变量并以set如果您尝试更改一些成员变量。名称可以是任何有效的标识符。

所以setValueorsetA只是这些成员函数的标识符。它不会影响代码。

同时,不同的类可以具有相同命名的 getter 或 setter,因为这些函数名在不同的类范围内。

于 2013-04-24T01:31:49.323 回答