简单明了,就是这种风格:
public:
int GetMyAge(){
return myAge;
}
void SetMyAge(int myAge){
this->myAge = myAge;
}
private:
int myAge;
(我知道这是“同样的事情”,但是)我已经阅读了大部分关于SO的相关问题,我仍然不知道“最好的”和“最官方的”用C ++做的方法。这不仅仅是偏好问题,可以吗?
编辑:
似乎它可以。
答案 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。