天天看點

C++ 筆記(2)結構體和類

個人聲明:本文僅作為作者本人記錄學習過程遇到的問題以及對這些問題的思考,作者也會随着學習進度進行相應的修改。為了避免誤人子弟,請所有讀者在閱讀本文内容時,時刻保持懷疑的态度,用批判性眼光閱讀!

1.使用結構體和類分别實作【堆棧存儲】的差別

結構體實作

#include <iostream>
using namespace std;

//堆棧的資料對象集
typedef int Position;
struct SNode {
    ElementType *Data; /* 存儲元素的數組 */
    Position Top;      /* 棧頂指針 */
    int MaxSize;       /* 堆棧最大容量 */
};
//堆棧的操作集(函數聲明)
typedef struct SNode *Stack;
Stack CreateStack( int MaxSize );
bool IsFull( Stack S );
bool Push( Stack S, ElementType X );
bool IsEmpty( Stack S );
ElementType Pop( Stack S );
           

類實作

#include <iostream>
using namespace std;
//自定義堆棧類,存儲資料類型可變(模闆)
template <typename T>
class Stack{
private:	//資料對象集 
    T *Data;
    int Top;
    int MaxSize;
public:		//操作集
    void CreatStack( int MaxSize );
    bool IsFull();
    bool Push( T X );
    bool IsEmpty();
    T Pop();
};
           

在學習C++基礎知識的時候,我就有聽到一個說法“結構體是特殊的類”,因為從【包含成員】的角度來看,結構體和類都有【資料成員】,唯獨少了【函數成員】。且不論這句話本身是對是錯(希望讀者也不要盲目肯定或否定),接下來我将由此出發,對結構體和類的差別做一些分析。

主要相同點:

  1. 都可以自由定義其資料成員(數量上、資料類型上的自定義)
  2. 結構體和類在定義後都需要執行個體化(即建立對象)後再進行使用。

主要差別:

  1. 相比結構體,類除了包含資料成員,還可以包含函數成員。即:類(資料對象集+操作集),結構體(資料對象集)。
  2. 類的成員(資料、函數)都可以限定通路權限(private、public、protected),而結構體中的成員在其生命周期内都可以直接通路。

2.通路成員運算符 “.” 和 “->”的差別

結合上文提到的結構體和類的差別,我們要想使用結構體或者類中的成員時,都需要一個操作【調用】。而一般我們就是用通路成員運算符來調用資料成員和函數成員。

目前就我了解,“.”運算符用于“對象的成員調用”,而“->”用于“對象指針的成員調用”。舉個例子:

//此處用結構體說明(類也是同理,隻不過類有通路權限的概念,說明起來比較麻煩)
typedef struct Student* PStu;
struct Student{
	char name[10];	//姓名
	int stuID;	//學号
	double score;	//成績
};
//1. 首先我們建立一個學生對象和對象指針
Student stu1;
PStu pstu1;
//2. 通過對象通路其資料成員(姓名、學号、成績)
stu1.stuID = 9527;	//學号指派
stu1.score = 710;	//修改英語六級分數
//3. 通過對象指針通路其資料成員
cout << pstu1->stuID << endl;
cout << pstu1->score << endl;
           

這就是這兩個成員運算符的使用差別了。

未完待續…