2013-09-01 108 views
2

我只是想知道你是否可以向我解釋帶參數的函數是如何工作的。 我一直在下面的教程等,但他們似乎並沒有解釋如何代碼工作得到輸出。繼承人一個例子:C++函數參數和類

#include <iostream> 

using std::endl; 
using std::cout; 
using std::cin; 
using std::string; 



class stan 
{ 
public: 
    void setName(string x) 
    { 
     name = x; 
    } 
    string getName() 
    { 
     return name; 
    } 

private: 
string name; 
}; 

int main() 
{ 
stan con; 
con.setName("Bruce Almighty"); 
cout << con.getName() << endl; 
} 

我不明白我們如何從公共字符串名稱獲得私人字符串名稱。我所說的一定聽起來很混亂,但我不知道該怎麼說,我只想知道這段代碼是如何工作的。 由於任何人幫助,這意味着很多

+0

'SetName'被指派爲對象'con'到Buruce全能和字符串''name'被getName'返回回值它存在於該字符串變量'name'中 –

+1

您正在使用哪種開發環境?您應該能夠使用調試器逐行執行代碼,並在每個步驟中檢查變量的值。這在學習如何工作時非常有用。 –

+0

您發佈的代碼是否已編譯?你有一個使用聲明類'的std :: string'('使用std :: string'),但不包括相關的頭''。 –

回答

0

http://www.cplusplus.com/doc/tutorial/classes/

  • 一類的私有成員設置只能從他們的朋友同類或其他 內成員。
  • 受保護的成員可以從他們同一班級的成員和他們的朋友 以及他們派生類的成員訪問。
  • 最後,公共成員可以在任何可見對象的地方訪問。

基本上,一個私有成員是隻有一類函數可以訪問。所以「字符串名稱」只能從類函數讀取/寫入。公共函數/變量可以從類外調用,你給出的例子是「setName」和「getName」

所以爲了編寫或讀取私有字符串,你的代碼使用你創建的公共函數。

1
  1. 程序從功能main開始。
  2. 它聲明瞭stan類型的局部變量con
  3. 對象con的方法setName與參數"Bruce Almighty"一起被調用。
  4. 標題爲void setName(string x)的方法開始執行。參數x取相應參數的值("Bruce Almighty")。
  5. 此對象的私人成員name設置爲參數x"Bruce Almighty")的值。方法setName返回到被調用的點。
  6. cout表示控制檯輸出。
  7. 要申請運營商<<,con.getName()需要進行評估。不帶參數調用對象con的方法getName
  8. 標題爲string getName()的方法開始執行。沒有涉及參數。
  9. 返回此物品的私人會員name的價值("Bruce Almighty")。
  10. 方法getName返回到它被調用的值爲"Bruce Almighty"的點。
  11. cout使用此值並在控制檯中生成它。
  12. 相同的cout對象在控制檯中產生endl值。 endl在控制檯中創建一個新行。
0

基本步驟:

con.setName("Bruce Almighty"); 

調用setname功能,將字符串"Bruce Almighty"它。

void setName(string x) 

收到你發來的字符串"Bruce Almighty",並調用它x

name = x; 

分配的x的值,這是"Bruce Almighty",給變量name

con.getName() 

要求getName函數的值。

string getName() 

聲明getName功能爲一體,它返回一個string

return name; 

取入可變name保持的字符串,它setName設置爲"Bruce Almighty"並將其返回給調用者,這將其發送到cout用於輸出。

0

setName是幫助您將字符串「Bruce Almighty」提供給斯坦村的私人名稱字段的人。

你是在說,「嘿的setName,我要通過‘冒牌天神’的說法爲您的參數X。我不在乎你怎麼做,而只是其交付給私人命名場!

setname可以說, 「好,我知道了,你的意思是我X參數是冒牌天神吧?」

你說, 「是吧!」

setName說。 「好吧,我已經完成了,你不需要知道我是怎麼做到的,這就是我們所說的抽象,你只需要命令,但是你不需要知道我是如何做到的,但是,如果你想要要知道,我這樣做是通過使用賦值運算符=我放在專用名稱場左側,和我的參數X在右側,因爲你提供冒牌天神我的參數x,它被分配給私人名稱字段。繁榮!「

0

在類定義中,您可以使用其名稱訪問數據成員。例如。在setName內部所有成員的名稱都在範圍內,因此也是私有數據成員name。以這種方式,語句:

name = x; 

分配的x的值(的setName參數),以name,其是私有數據成員。

命名成員時,雖然你必須小心,因爲如果一個局部變量命名爲同一個成員名稱衝突可能會出現。你可以避開他們要麼前綴的成員this->,如:

this->name = x; 

或使用命名約定如給予任何數據成員的名字的前綴:

m_name = x; // "m_" stands for "member" 
... 
private: 
    string m_name; 

this爲代表的指針是C++的關鍵字到你調用你的方法的對象(即成員函數)。它可以用於在類定義內引用該對象。因此this->name裝置「的構件稱爲name由指針指向this對象內部」