寫在前面:大家好K。首先爲你點進這篇有趣的文章點贊👍!文章在撰寫過程中難免有疏漏和錯誤,歡迎你在下方留言指出文章的不足之處;如果覺得這篇文章對你有用,也歡迎你點贊和留下你的評論。更多內容請點進👉我的博客K。👈閱覽。
1. 成員函數
示例,利用成員函數初始化成員數據:
struct Students {
// 這是普通成員數據
string name;
int age;
// 下面定義成員函數,修改成員數據值
void set(string name, int year) {
// 形參與成員數據同名時,用this->訪問成員數據
this->name = name;
age = year;
}
};
// 某函數中
Students stu;
stu.set("jkz", 18); // 調用成員函數
cout << stu.name << ' ' << endl; // 輸出:jkz
利用成員函數初始化數據成員,若形參名與成員數據名相同時,用this
關鍵字,this
是指向本身的指針,所以訪問成員數據用->
。
2. 構造函數
結構:
:{}
示例
struct Students {
string name;
int age;
};
在沒有手動初始化值時,兩個成員變量默認值爲null和0。如果想自定義初始化的值,該如何做呢?
2.1 如何定義
struct Students {
string name;
int age;
int grade;
Students(string name, int score) : age(18), grade(score) {
this->name = name; // 注意用"->"訪問成員變量
}
// 構造函數可以重載(形參列表不同)
Students(): name("jkz"), age(18), grade(100) {} // {}不能丟掉
};
類似於成員函數,但是在初始化成員方面,構造函數顯然更方便。
注意:
1. 構造函數冒號的左邊和構造函數相同,名字與結構體名相同,還有一個形參列表
2. 如果形參名與成員變量名不同,則可以用成員變量名(形參名)
(示例grade變量),多個成員用逗號分割。如果形參名與成員變量名相同,則用{this->成員變量名=形參名;}
(示例name變量)來初始化,注意用“->”訪問成員變量
3. 可以直接用變量名(值)
(示例name變量)直接給變量賦值
4. {}
一定要有,即使沒有用到this
來初始化變量,也要加上{}
5. 形參列表可以爲空,然後用第3點的方法初始化變量
6. 若無構造函數,系統會贈送初始值
7. this
是指向本身的指針,所以訪問成員變量用->
8. 構造函數可以重載
2.2 如何使用
// 在某函數中
// 若構造函數形參列表可以爲空
// 用Students stu;
Students stu("jkz", 100);
cout << stu.name << ' ';
cout << stu.age << ' ';
cout << stu.grade << endl;
// 輸出
// jkz 18 100
定義時,結構體變量名後跟是參列表
像正常訪問結構體成員一樣訪問
注意:若初始化形參列表爲空,那麼在定義結構體變量時,不加()
,只需要結構體名 變量名
可以使用
new
運算符在堆區創建對象(點擊學習內存4區)
2.3 還有一種寫法
結構:
結構體名(){函數體}
這種寫法,形參列表必須爲空,不推薦用。
2.4 示例:創建鏈表節點
創建鏈表節點必須用
new
運算符來避免內存錯誤,點擊學習懸垂指針
// 定義結構體
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 在別的地方使用
// 創建節點
// 必須使用new運算符使用堆區空間,以免產生內存錯誤
ListNode* h = new ListNode(值域的值)
// 修改值域,連接新節點
h->next = new ListNode(值域的值)
// 往後移動節點
h = h->next
// 其他操作……
3. 與類的區別
C++中的類和java中的類具有較大差別
- 結構體關鍵字
struct
,類關鍵字class
- 結構體聲明通常不包括 public 或 private 的訪問修飾符。
- C++中類的成員變量,默認是私有的;結構體中的數據成員是公共的,可以被直接訪問
- 儘管結構體可以包含成員函數,但很少這樣做。所以,通常情況下結構體聲明只會聲明成員變量。(爲了讀懂別人的代碼和老代碼,也要學習結構體成員函數)