一、类的引入
struct student
{
char name[20];
int age;
};
上面一段代码是在C语言中结构体的定义,我们知道在C语言中的结构体只能定义变量,但是可不可以在结构体中定义函数呢?
答案是在C语言中不可以,但是在C++中可以,在C++中,结构体不仅可以定义变量我,也可以定义函数。
举个例子:
在C语言中实现栈:
Stack.h
typedef int STDataType;
#define N 10
typedef struct Stack
{
STDataType _a[N];
int _top; // 栈顶
}Stack;
// 支持动态增长的栈
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);
// 获取栈中有效元素个数
int StackSize(Stack* ps);
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回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)
{
//....
}
// 获取栈中有效元素个数
int StackSize(Stack* ps)
{
//....
}
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回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++中实现栈
```cpp
#include<iostream>
using 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; //将元素个数置为0
}
//元素入栈
void Push(const DataType& data)
{
//扩容
_array[_size] = data;
++_size;
}
//栈顶元素
DataType Top()
{
return _array[_size - 1];
}
//栈的销毁
void Destory()
{
if (_array)
{
free(_array); //释放空间
_array = nullptr; //栈顶地址置为空指针
_capacity = 0;
_size = 0;
}
}
DataType* _array; //栈的地址
size_t _capacity; //栈的空间大小
size_t _size; //栈的元素的个数
};
int main()
{
Stack s;
s.Init(10);
s.Push(1);
s.Push(2);
s.Push(3);
s.Destory();
return 0;
}
在C++中,结构体的定义更偏向于用class来代替struct。
二、类的定义
类定义的一般形式:
class classname
{
//成员函数+成员变量=类体
};//注意这里的分号不能省略
class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。
类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。
类的两种定义方式:
1、声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。
//声明和定义全放在类体中
class person
{
public:
//个人基本信息
void showinfo()
{
cout << _name << "-" << _sex << "-" << _age << endl;
}
private:
char* _name; //姓名
char* _sex; //性别
int _age; //年龄
};
2、类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名。
person.h
class person
{
public:
//显示个人信息
void showInfo();
private:
char* _name; //姓名
char* _sex; //性别
int _age; //年龄
};
peson.cpp
#include"person.h" //头文件的引用
void person::showInfo() //成员函数前需要用加类名和域限定符
{
cout << _name << "-" << _sex << "-" << _age << endl;
}