c++兼容了c中的struct中的用法
c++将struct升级成了类
1个类可以实列化N个对象
#include<iostream>
using namespace std;
typedef int DataType;
//可以将初始化,push等功能函数全部存放在stack中
//用st.Init(100);//即可初始化
struct Stack
{
void Init(size_t capacity)
{
_array = (DataType*)malloc(sizeof(DataType) * capacity);
if (nullptr == _array)
{
perror("malloc申请空间失败");
return;
}
_capacity = capacity;
_size = 0;
}
void Push(const DataType& data)
{
// 扩容
_array[_size] = data;
++_size;
}
DataType Top()
{
return _array[_size - 1];
}
void Destroy()
{
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);
cout << s.Top() << endl;
s.Destroy();
return 0;
}
cpp中不用加struct
typedef struct listnodec
{
struct listnodec* next;
int val;
}ltnode;
struct listnodecpp
{
listnodecpp* next;
int val;
};
#include<iostream>
using namespace std;
typedef int DataType;
//c++中
//1. public修饰的成员在类外可以直接被访问
//2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
//3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
//4. 如果后面没有访问限定符,作用域就到 } 即类结束。
//5. class的默认访问权限为private,struct为public(因为struct要兼容C)
//注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别
//public:struct默认
//private:class默认
class Stack
{
public:
void Init(size_t capacity=4)
{
_array = (DataType*)malloc(sizeof(DataType) * capacity);
if (nullptr == _array)
{
perror("malloc申请空间失败");
return;
}
_capacity = capacity;
_size = 0;
}
void Push(const DataType& data)
{
// 扩容
_array[_size] = data;
++_size;
}
DataType Top()
{
return _array[_size - 1];
}
void Destroy()
{
if (_array)
{
free(_array);
_array = nullptr;
_capacity = 0;
_size = 0;
}
}
private:
DataType* _array;
size_t _capacity;
size_t _size;
};
int main()
{
Stack st2;
st2.Init();
st2.Push(100);
return 0;
}
面向对象的三大特性:封装,继承,多态
class Date
{
public:
void Init(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d;
d.Init(2024, 3, 31);
return 0;
}