我们初步了解了C++,也用C语言实现过栈,就我们当前所更新过的有关C++学习内容以栈为例子,来简单对比一下C语言和C++。
1.C++中栈的实现
栈的C语言实现在【数据结构】栈的概念、结构和实现详解-CSDN博客 ,下面是C++实现的栈,
在Stack.cpp一个文件实现就行。
#include <iostream>
#include <assert.h>
using namespace std;
typedef int STDateType;
class Stack //栈类
{
public: //类的方法(成员函数)
void STInit(int n = 4) //栈初始化,用到了缺省参数
{
_a = (STDateType*)malloc(n * sizeof(STDateType));
if (nullptr == _a)
{
perror("malloc fail");
return;
}
_top = 0;
_capacity = n;
}
void STDistroy() //栈的销毁
{
free(_a);
_a = nullptr;
_top = _capacity = 0;
}
void STPush(STDateType x) //入栈
{
if (_top == _capacity)
{
int newcapacity = _capacity * 2;
STDateType* tmp = (STDateType*)realloc(_a, newcapacity * sizeof(STDateType));
if (tmp == nullptr)
{
perror("realloc fail");
return;
}
_a = tmp;
_capacity = newcapacity;
}
_a[_top] = x;
_top++;
}
void STPop() //出栈
{
assert(_top > 0);
_top--;
}
STDateType STTopDate() //获取栈顶元素
{
assert(_top > 0);
return _a[_top - 1];
}
bool STEmpty() //判断栈是否为空
{
return _top == 0;
}
int STSize() //获取栈元素个数
{
return _top;
}
private: //类的属性(成员变量)
STDateType* _a;
int _top;
int _capacity;
};
在同一个文件的main函数里测试一下。
int main()
{
Stack st;
st.STInit();
st.STPush(1);
st.STPush(2);
st.STPush(3);
while (!st.STEmpty())
{
cout << st.STTopDate() << " ";
st.STPop();
}
st.STDistroy();
return 0;
}
2.C语言与C++对比
C++面向对象有3大特征:封装、继承、多态。Stack的对比我们可以初步了解一下封装。
C++中数据和函数都放在了类里面,通过访问限定符进行了限制,不能再随意通过对象直接进行修改数据,这是C++封装的一种体现,这个是最重要的变化。这里的封装本质就是一种更严格规范的管理,避免出现乱访问修改问题。C++的封装后续还要不断学习。
C++中有一些相对方便的语法,比如Init给缺省参数会方便很多,成员函数不用传对象地址,因为this指针隐含的传递了,方便面很多,类型不再需要typedef,直接用类名。
本篇就介绍到这里,拜拜~