
//类和对象:
//与C语言中的结构体有些相似,不过相比结构体有所升级,结构体中只能存放成员变量,类可以同时存放成员变量和成员函数
//用类定义出来的变量称为对象,也称类对象
//类:是一个标准,类里面可以规定这个类中包含那些成员函数和成员变量,一旦规定,定义的类对象中也会有相应的成员变量
//成员函数是统一放到一个公共代码区的地方,每个对象调用的函数都是同一个函数,地址是一样的,但是每个对象中的成员变量是不一样的
//类关键字:一般用struct或者class来定义一个类
//struct 和 class的区别:C++兼容C语言中的struct,struct和class都可以用来定义类,但是有一个区别:
//struct定义的类默认可以被类外访问,即是公有的,class定义的类默认不能被类外访问,即是私有的
//类限定符:public,private,protected
//public:被public修饰的部分是公有的,可以被类外访问,作用的范围从public到下一个限定符,若没有下一个限定符,则到类结束
//private:被private修饰的部分是私有的,不可以被类外访问,作用的范围从private到下一个限定符,若没有下一个限定符,则到类结束
//protected:被protected修饰的部分是私有的,不可以被类外访问,作用的范围从protected到下一个限定符,若没有下一个限定符,则到类结束
//类作用域:从定义类开始到定义类结束的范围
//域限定符::: 两个冒号,可以限定是哪个域里面的,这个一般在函数的声明和定义分开是可以用到
//写一个栈类
//定义一个栈类
class Stack
{
public:
//成员函数的声明
//初始化
void Init();
//插入
void Push(int x);
//删除
void Pop();
//取栈顶元素
int Top();
//计算栈中元素个数
size_t Size();
//销毁栈
void Destroy();
private:
//成员变量
int* _a;
int _top;
int _capacity;
};
//成员函数的定义
//初始化
void Stack::Init()
{
_a = nullptr;
_top = _capacity = 0;
}
//插入
void Stack::Push(int x)
{
if (_top == _capacity)
{
int capacity = _capacity == 0 ? 4 : _capacity * 2;
int* tmp = (int*)malloc(sizeof(int) * capacity);
if (tmp == nullptr)
{
printf("malloc fail\n");
return;
}
_a = tmp;
_capacity = capacity;
}
_a[_top++] = x;
}
//删除
void Stack::Pop()
{
if (_top <= 0)
{
return;
}
_top--;
}
//取栈顶元素
int Stack::Top()
{
if (_top <= 0)
{
return -1;
}
return _a[_top - 1];
}
//计算栈中元素个数
size_t Stack::Size()
{
return _top;
}
//销毁栈
void Stack::Destroy()
{
free(_a);
_a = nullptr;
_top = _capacity = 0;
}
int main()
{
Stack st;
st.Init();
st.Push(1);
cout << "栈顶元素为:";
cout << st.Top() << endl;
cout << "栈中的元素个数为:";
cout << st.Size() << endl;
st.Pop();
cout << "栈中的元素个数为:";
cout << st.Size() << endl;
st.Destroy();
return 0;
}
//计算类对象的大小:三种情况
//类对象中成员函数和成员变量均存在:需要按照内存对齐进行计算
//类对象中只有成员函数没有成员变量:大小为1字节
//类对象中既没有成员函数也没有成员变量:大小为1字节
//写一个日期类
class Date
{
public:
//成员函数
void Init(int year, int month, int day);
void Print();
private:
//成员变量
int _year;
int _month;
int _day;
};
//日期函数的定义
void Date::Init(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
void Date::Print()
{
cout << "今天是:";
cout << _year << "-" << _month << "-" << _day << endl;
}
void TestDate()
{
Date d;
d.Init(2022, 6, 3);
d.Print();
}
int main()
{
//TestStack();
TestDate();
return 0;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)