繁体   English   中英

C ++ getter和setters最好的风格

[英]C++ getters and setters best style

在Java中,代码约定简单明了,在这种风格中:

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

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

编辑:

好像它可以

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

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

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

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

一个简单的答案:类名一般是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正确运行。

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

EG:

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

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

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

不过我想对此发表评论

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

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

编辑我认为变量名称被不恰当地理解。

myAge应该命名为_myAge。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM