struct student
{char name[20];
int age;
};
上面一段代碼是在C語言中結(jié)構(gòu)體的定義,我們知道在C語言中的結(jié)構(gòu)體只能定義變量,但是可不可以在結(jié)構(gòu)體中定義函數(shù)呢?
答案是在C語言中不可以,但是在C++中可以,在C++中,結(jié)構(gòu)體不僅可以定義變量我,也可以定義函數(shù)。
舉個例子:
在C語言中實現(xiàn)棧:
Stack.h
typedef int STDataType;
#define N 10
typedef struct Stack
{STDataType _a[N];
int _top; // 棧頂
}Stack;
// 支持動態(tài)增長的棧
typedef int STDataType;
typedef struct Stack
{STDataType* _a;
int _top; // 棧頂
int _capacity; // 容量
}Stack;
// 初始化棧
void StackInit(Stack* ps);
// 入棧
void StackPush(Stack* ps, STDataType data);
// 出棧
void StackPop(Stack* ps);
// 獲取棧頂元素
STDataType StackTop(Stack* ps);
// 獲取棧中有效元素個數(shù)
int StackSize(Stack* ps);
// 檢測棧是否為空,如果為空返回非零結(jié)果,如果不為空返回0
int StackEmpty(Stack* ps);
// 銷毀棧
void StackDestroy(Stack* ps);
Stack.c
// 初始化棧
void StackInit(Stack* ps)
{//....
}
// 入棧
void StackPush(Stack* ps, STDataType data)
{//....
}
// 出棧
void StackPop(Stack* ps)
{//....
}
// 獲取棧頂元素
STDataType StackTop(Stack* ps)
{//....
}
// 獲取棧中有效元素個數(shù)
int StackSize(Stack* ps)
{//....
}
// 檢測棧是否為空,如果為空返回非零結(jié)果,如果不為空返回0
int StackEmpty(Stack* ps)
{//....
}
// 銷毀棧
void StackDestroy(Stack* ps)
{//....
}
main.c
Stack s;
StackInit(&s);
StackPush(&s,1);
StackPush(&s,2);
StackPush(&s,3);
//....
在C++中實現(xiàn)棧
```cpp
#includeusing namespace std;
typedef int DataType;
struct Stack
{void Init(size_t capacity)
{_array = (DataType*)malloc(sizeof(DataType) * capacity);
//空間檢查
if (nullptr==_array)
{ perror("malloc申請空間失敗");
return;
}
_capacity = capacity; //更新空間容量
_size = 0; //將元素個數(shù)置為0
}
//元素入棧
void Push(const DataType& data)
{//擴容
_array[_size] = data;
++_size;
}
//棧頂元素
DataType Top()
{return _array[_size - 1];
}
//棧的銷毀
void Destory()
{if (_array)
{ free(_array); //釋放空間
_array = nullptr; //棧頂?shù)刂分脼榭罩羔? _capacity = 0;
_size = 0;
}
}
DataType* _array; //棧的地址
size_t _capacity; //棧的空間大小
size_t _size; //棧的元素的個數(shù)
};
int main()
{Stack s;
s.Init(10);
s.Push(1);
s.Push(2);
s.Push(3);
s.Destory();
return 0;
}
二、類的定義在C++中,結(jié)構(gòu)體的定義更偏向于用class來代替struct。
類定義的一般形式:
class classname
{//成員函數(shù)+成員變量=類體
};//注意這里的分號不能省略
class為定義類的關(guān)鍵字,ClassName為類的名字,{}中為類的主體,注意類定義結(jié)束時后面分號不能省略。
類體中內(nèi)容稱為類的成員:類中的變量稱為類的屬性或成員變量; 類中的函數(shù)稱為類的方法或者成員函數(shù)。
類的兩種定義方式:
1、聲明和定義全部放在類體中,需注意:成員函數(shù)如果在類中定義,編譯器可能會將其當成內(nèi)聯(lián)函數(shù)處理。
//聲明和定義全放在類體中
class person
{public:
//個人基本信息
void showinfo()
{cout<< _name<< "-"<< _sex<< "-"<< _age<< endl;
}
private:
char* _name; //姓名
char* _sex; //性別
int _age; //年齡
};
2、類聲明放在.h文件中,成員函數(shù)定義放在.cpp文件中,注意:成員函數(shù)名前需要加類名。
person.h
class person
{public:
//顯示個人信息
void showInfo();
private:
char* _name; //姓名
char* _sex; //性別
int _age; //年齡
};
peson.cpp
#include"person.h" //頭文件的引用
void person::showInfo() //成員函數(shù)前需要用加類名和域限定符
{cout<< _name<< "-"<< _sex<< "-"<< _age<< endl;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧