类和对象初阶

类和对象初阶,第1张

//类和对象:

//与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;

}

 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1324331.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存