C ++ getter和setters最好的风格

时间:2011-04-26 09:08:20

标签: c++ coding-style getter-setter

Java代码约定中的

简单明了,就是这种风格:

public:
    int GetMyAge(){
        return myAge;
    }
    void SetMyAge(int myAge){
        this->myAge = myAge;
    }
private:
    int myAge;

(我知道这是“同样的事情”,但是)我已经阅读了大部分关于SO的相关问题,我仍然不知道“最好的”和“最官方的”用C ++做的方法。这不仅仅是偏好问题,可以吗?

编辑:

似乎它可以

4 个答案:

答案 0 :(得分:11)

最好不要这样做。你的年龄真的可以这样改变吗?盲目地为所有属性提供getter和setter是一个标志,你没有正确设计你的课程。

答案 1 :(得分:5)

最好的风格是允许您和您的团队制作优质软件,让您的客户继续为您付费。

这种风格对您和您的团队有何影响?你发现它会导致(或阻止)错误吗?您觉得维护代码很容易吗?你对这种格式有争议吗?

回答这些问题,你的问题的答案就会出现。

答案 2 :(得分:0)

一个简单的答案:类名一般是c ++中的资本(除了std类),方法是小写的,有些框架像Qt更喜欢camelCase,但我更喜欢underscore_notation - 所以STL也参见例如。 " auto_ptr的"

类并不总是有单独的.h文件,因为这里.java文件被分成.h标题(对于整个包)和.cpp实现文件,每班一个。

class TipicalCamelCase {
public:
    /// mark the frequently used small functions inline in the class def.
    inline int getMyAge() const;
    void setMyAge(int myAge=5); // defaults go to the definition.

    /// for efficiently setting more complex things.
    void setMyStuff(const MyStuff& myStuff); 

    /// a tipical class-valued getter 
    /// (sometimes scoffed at since it can have memory leaks 
    /// if you dismiss the class but still use and don't copy MyStuff.)
    const MyStuff& getMyStuff() const; 

    /// a safe getter, but forces copying-out MyStuff.
    MyStuff getMyStuff() const; 

private:
    int myAge;
    static const int zero=0; // allowed only in the new C++11 standard.
    static const int one;
};

一些实现/初始化(通常在单独的TipicalCamelCase.cpp文件中):

const int TipicalCamelCase::one = 1;

int TipicalCamelCase::getMyAge() const{
    return myAge;
}
void TipicalCamelCase::setMyAge(int myAge_){
    myAge = myAge_;
}

下划线样式相同,但

int Tipical_camel_case::get_my_age() const
{
    return my_age;
}

我更喜欢这个,因为它在标题和实现文件中都看起来更干净。 您可以看到功能标题比java更长。特别是你会看到templates(泛型)2行'标题是典型的,因此值得将它们分开。

template<typename _Tp>
int Class_name::general_function(_Tp);

我认为它应该作为一种风格介绍。 如果使用继承,对于java风格的工作,请标记除构造函数virtual之外的所有函数,以便@overrides正确运行。

答案 3 :(得分:-5)

您在上面的代码中所写的是正确的语法。如果您正在寻找一个拇指规则,请以这样的方式对您的acccessor函数进行编码,使其完全设置/获取值。

EG:

void SetMyAge(int newAge)
{
    if(newAge > 10 && newAge < 100)
       _age = newAge ;
}

我更愿意将验证“newAge&gt; 10&amp;&amp; newAge&lt; 100”放在另一个函数IsValidAge中;即使代码只是一行。从长远来看,小函数有助于维护代码,并帮助新开发人员更好地理解代码。

void SetMyAge(int newAge)
{
    if(IsValidAge() )
       _age = newAge ;
}

但是我想对此发表评论

void SetMyAge(int myAge){
    this->myAge = myAge;
 }

优良作法是将类变量的名称约定区分为_myAge。

修改 我认为变量名称被不恰当地理解了。

myAge应该命名为_myAge。