我已经在C#中编程了一段时间,现在我想要提高我的C++技能.
上课:
class Foo
{
const std::string& name_;
...
};
Run Code Online (Sandbox Code Playgroud)
什么是最好的方法(我只想允许对name_字段的读访问):
inline const std::string& name() const { return name_; }谢谢.
这个问题的主要部分是关于为类内私有数据成员创建公共只读访问器的正确且计算效率最高的方法.具体来说,利用const type &引用来访问变量,例如:
class MyClassReference
{
private:
int myPrivateInteger;
public:
const int & myIntegerAccessor;
// Assign myPrivateInteger to the constant accessor.
MyClassReference() : myIntegerAccessor(myPrivateInteger) {}
};
Run Code Online (Sandbox Code Playgroud)
然而,目前建立的解决这个问题的方法是利用恒定的"getter"函数,如下所示:
class MyClassGetter
{
private:
int myPrivateInteger;
public:
int getMyInteger() const { return myPrivateInteger; }
};
Run Code Online (Sandbox Code Playgroud)
"getter/setters"的必要性(或缺乏)已经在诸如以下问题上反复出现:C++中访问方法(getter和setter)的约定然而这不是问题.
这两种方法都使用以下语法提供相同的功能:
MyClassGetter a;
MyClassReference b;
int SomeValue = 5;
int A_i = a.getMyInteger(); // Allowed.
a.getMyInteger() = SomeValue; // Not allowed.
int B_i = b.myIntegerAccessor; // Allowed.
b.myIntegerAccessor = SomeValue; // Not allowed. …Run Code Online (Sandbox Code Playgroud) Java程序员和API似乎更喜欢显式的set/get方法.
但是我得到了C++社区对这种做法不满的印象.如果是这样,是否有一个特殊的原因(除了更多的代码行)为什么会这样?
另一方面,为什么Java社区选择使用方法而不是直接访问?
谢谢
我想知道C++ getter和setter的良好语法.
private:
YourClass *pMember;
Run Code Online (Sandbox Code Playgroud)
我猜这个setter很简单:
void Member(YourClass *value){
this->pMember = value; // forget about deleting etc
}
Run Code Online (Sandbox Code Playgroud)
和吸气剂?我应该使用引用还是常量指针?
例:
YourClass &Member(){
return *this->pMember;
}
Run Code Online (Sandbox Code Playgroud)
要么
YourClass *Member() const{
return this->member;
}
Run Code Online (Sandbox Code Playgroud)
他们之间有什么区别?
谢谢,
乔
编辑:
对不起,我将编辑我的问题...我知道引用和指针,我问的是引用和常量指针,作为getter,它们在我的代码中会有什么区别,比如在未来,我希望什么样的shoud如果我去某种方式会失败...
所以我想我会使用const指针而不是引用
const指针不能删除或设置,对吧?
我已经阅读了关于访问器方法的3种不同约定的社区wiki查询,并且看到以下约定并不令人惊讶:
const unsigned& amount() const { return _amount; }
unsigned& amount() { return _amount; }
Run Code Online (Sandbox Code Playgroud)
是的,它与无缝的完全不同,因为它能够完全避免括号() - 这会(我觉得)是想法 - 但它仍然是某种东西; 对?
c++ ×5
coding-style ×2
c++11 ×1
class ×1
conventions ×1
getter ×1
java ×1
optimization ×1
pointers ×1
reference ×1
setter ×1
standards ×1