C++兼容C语言,可以说是对C语言的扩展和延伸。C++新增的一些语法解决或者优化了C语言之前不能解决的问题,我们以栈的实现为例。
C语言如何实现一个Stack_C
typedef int STDateType;
struct Stack_C
{
STDateType* _a;
int _top;
int _capacity;
};
typedef struct Stack_C Stack_C;
void Stack_CInit(Stack_C* ps);
void Stack_CDestory(Stack_C* ps);
void Stack_CPush(Stack_C* ps,STDateType x);
void Stack_CPop(Stack_C* ps);
//...
int main()
{
Stack_C st_c;
Stack_CInit(&st_c);
Stack_CPush(&st_c,1);
Stack_CPush(&st_c,2);
//st._capacity = 0;
//非法修改
Stack_CDestory(&st_c);
}
C语言不能解决的问题+C++如何解决
1.对于所创建的对象忘记初始化和销毁 -> C++中默认成员函数中的构造函数+析构函数 -> 对于自定义类型,创建对象和销毁对象时会自动调用构造函数初始化,析构函数清理资源。
2.谁都可以修改结构体的数据 -> 封装 -> 类+访问限定符,使得只有在类域中可以修改访问私有成员变量,在类域外无法访问和修改。
3.如果想同时定义两个栈 一个栈存int 一个栈存double C语言需要用户自己写很多重复的代码->模板 -> 通过类模板使得用户只需要写一个类似于图纸的模板,编译器会根据你提供的类型来创建这个类型的对象。
//(模板解决问题3)
template<class T>
class Stack_CPP
{
public://(构造函数和析构函数解决问题1)
Stack_CPP()
{
}
~Stack_CPP()
{
}
void Push(T x)
{
}
private://(封装解决问题2)
T* _a;
int _size;;
int _capacity;
};
int main()
{
Stack_CPP<int> st_cpp_int;
st_cpp_int.Push(1);
st_cpp_int.Push(2);
st_cpp_int.Push(3);
st_cpp_int.Push(4);
Stack_CPP<double> st_cpp_double;
st_cpp_double.Push(1.11);
st_cpp_double.Push(2.22);
}
在函数传参方面虽然实际传参个数相同,本质上是一样的,但是这样代码会更加简洁,容易维护。