我知道許多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. 私有成員變量範圍 - C++
- 3. (C++)從私有基類訪問私有成員變量
- 4. 公共類,但私有成員變量?
- 5. 閱讀私有變量的類成員
- 6. 私有數據VS類成員變量
- 7. 聲明私有成員變量
- 8. 關於訪問私有成員變量
- 9. C++私有函數成員
- 10. C++內聯朋友函數與成員變量名稱相同
- 11. C++私有成員變量在另一個函數中未知
- 12. C++類的私有成員
- 13. 訪問私有成員C++
- 14. 如何區分objective-c中的私有成員變量?
- 15. C++成員函數訪問私有靜態變量?
- 16. C#中的私有靜態成員變量
- 17. C++繼承中的保護和私有成員變量
- 18. 未知的私有成員變量與源文件中的全局變量
- 19. 私有成員
- 20. 如何重命名重構C#VS 2013項目中的所有私有成員變量變量?
- 21. C++:重寫純虛擬成員變量?
- 22. 單元測試函數只改變私有成員變量?
- 23. C++類與模板成員變量
- 24. 沒有定義結構成員變量 - 沒有成員命名
- 25. 成員變量在其他成員變量的方法中的隱私
- 26. OpenMP和C++:私有變量
- 27. 訪問私有成員變量沒有對象
- 28. 有關變量名成員前綴
- 29. 私有成員變量在dispatchTouchEvent在Nexus 5X成爲空
- 30. 通過公共方法訪問私有成員變量
你可以後綴一個'_'作爲參數名稱。 –
帶'm_'或's_'的前綴成員(用於靜態) –
您可以使用'this'來消除歧義。 – tux3