【C++】C++還能這麼用--結構體構造函數、成員函數、創建鏈表

寫在前面:大家好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中的類具有較大差別

  1. 結構體關鍵字struct,類關鍵字class
  2. 結構體聲明通常不包括 public 或 private 的訪問修飾符。
  3. C++中類的成員變量,默認是私有的;結構體中的數據成員是公共的,可以被直接訪問
  4. 儘管結構體可以包含成員函數,但很少這樣做。所以,通常情況下結構體聲明只會聲明成員變量。(爲了讀懂別人的代碼和老代碼,也要學習結構體成員函數)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章