我知道许多peoplpe使用私有成员变量名称的前缀或后缀。对于那些不这样做,但只是使用名称 - 如果你想有相同名称的构造函数参数,你如何初始化它们?C++私有成员变量与ctor params同名
1
A
回答
3
区分通过简单地写他们的两种方法。语言的规则防止出现问题。
struct Foo
{
Foo(int x) : x(x) {};
int x;
};
外()
,只有数据成员是在范围;里面,函数参数隐藏成员,就像它在一个正常的函数体:
int x = 2;
void foo(int x)
{
// any access to `x` means the argument
}
这是该命名数据成员时,我不使用m_
前缀样式(或同等学历)的原因之一。
3
你刚才初始化它们在初始化列表:
struct foo
{
foo(int bar) : bar(bar) {}
private:
int bar;
};
注意,初始化列表是明确初始化在构造函数中成员的唯一途径。一旦你在构造函数的主体中,成员已经被初始化了。
作为题外话,C++允许你在声明的点,在这种情况下,除非在构造否则初始化它被初始化为该值初始化的成员:
struct foo
{
foo(int bar) : bar(bar) {}
foo() {} // bar initialized to 42
private:
int bar = 42;
};
2
如果使用初始化列表,你可以简单地使用相同的名称,编译器会明白你的意思。
实施例:
Book::Book(std::string title, int year)
: title(title), year(year)
{}
1
最简单的方法是使用MEM-初始化列表。例如
class A
{
private:
int data;
public:
A(int data) : data(data) {}
};
如果你想使用构造函数体内的数据成员则是数据成员和参数
class A
{
private:
int data;
public:
A(int data) : data(data)
{
A::data *= data;
this->data *= data;
}
};
+0
除现在你的会员有三倍的所需价值。不好。 –
1
该方法正式名称并不具有很高的价值,考虑的范围是多么有限。但应该仍然是能够立即区分这些项目的“起源”的动机。
它已经成为我的做法,既
一)前缀我的数据属性与“M_的名字,
和
b)用“A_”前缀的方法/函数的参数名称或'an_',始终致力于语法的正确性。
LMBM::Node::Node(uint8_t a_max) : m_max (a_max) ...
void* LMBM::Node::threadEntry(void* an_objPtr) ...
void DV1::processDirent(const std::string& a_dirPath) ...
void DV1::handleDT_REG (DV::Dirent* an_ent,
const std::string& a_path) ...
FInfo (const std::string& aPfn, const int64_t& aFileSz) :
m_pfn (aPfn),
m_fileSz (aFileSz) ...
目标 - 更容易阅读
动机 - 代码写一次,读多次
我了解的构造函数初始化列表的特殊情况。但我也确信使用前缀(您选择的)有助于防止在开发和维护期间发生的几种错误。
相关问题
- 1. 私有成员变量范围 - C++
- 2. 公共类,但私有成员变量?
- 3. 阅读私有变量的类成员
- 4. 声明私有成员变量
- 5. 关于访问私有成员变量
- 6. C++私有函数成员
- 7. 访问私有成员C++
- 8. C++成员函数访问私有静态变量?
- 9. C#中的私有静态成员变量
- 10. 如何区分objective-c中的私有成员变量?
- 11. C++继承中的保护和私有成员变量
- 12. 未知的私有成员变量与源文件中的全局变量
- 13. c + +初始化成员变量与{}
- 14. 私有成员
- 15. C++:重写纯虚拟成员变量?
- 16. 单元测试函数只改变私有成员变量?
- 17. 成员变量在其他成员变量的方法中的隐私
- 18. 没有定义结构成员变量 - 没有成员命名
- 19. 访问私有成员变量没有对象
- 20. OpenMP和C++:私有变量
- 21. 有关变量名成员前缀
- 22. 私有成员变量在dispatchTouchEvent在Nexus 5X成为空
- 23. 初始化模板类中的私有成员变量向量
- 24. 子类化与私有成员
- 25. C++私有变量混淆
- 26. C++私有成员可访问吗?
- 27. constexpr构造对象与私有成员
- 28. C#引用成员变量
- 29. C++:静态成员变量
- 30. C++成员变量混乱
你可以后缀一个'_'作为参数名称。 –
带'm_'或's_'的前缀成员(用于静态) –
您可以使用'this'来消除歧义。 – tux3