C++面向对象-构造函数与析构函数
2022/9/7 1:41:37
本文主要是介绍C++面向对象-构造函数与析构函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
以OOP实现一个顺序栈为例, 介绍构造函数与析构函数
#include <iostream> #include <iterator> using namespace std; /* 构造函数和析构函数 函数的名字和类名一样,没有返回值 */ class SeqStack { public: //构造函数有参数,可重载 SeqStack(int size = 10) { cout << this << " SeqStack()" << endl; _pstack = new int[size]; _top = -1; _size = size; } // void init(int size = 10) { // _pstack = new int[size]; // _top = -1; // _size = size; // } //析构函数不带参数,只能有一个,可手动调用释放堆内存 ~SeqStack() { cout << this << " ~SeqStack()" << endl; delete[] _pstack; _pstack = nullptr; } // void release() { // delete[] _pstack; // _pstack = nullptr; // } void push(int val) { if (full()) resize(); _pstack[++_top] = val; } void pop() { if (empty()) return; --_top; } int top() { return _pstack[_top]; } bool empty() { return _top == -1; } bool full() { return _top == _size - 1; } void resize() { int* ptmp = new int[_size * 2]; for (int i = 0; i < _size; ++i) { ptmp[i] = _pstack[i]; } delete[] _pstack; _pstack = ptmp; _size += 2; } private: int* _pstack; // 动态开辟数组,存储顺序栈的元素 int _top; //指向栈顶元素的位置 int _size; //数组扩容总大小 }; int main() { // 1. 开辟内存 // 2. 调用构造函数 SeqStack s; // s.init(5); //对象成员变量的初始化 for (int i = 0; i < 15; ++i) { s.push(rand() % 100); } while (!s.empty()) { cout << s.top() << " "; s.pop(); } cout << endl; // s.release(); //释放对象成员变量占用的外部堆内存(外部资源) //出作用域,对象自动进行析构 SeqStack s1(50); //堆上的一定要手动释放 SeqStack* ps = new SeqStack(60); ps->push(70); ps->push(80); ps->pop(); cout << ps->top() << endl; delete ps; //先调用ps->~SeqStack() 然后free(ps) // 先构造的后析构,后构造的先析构 // 开始运行... // 0x7fff9908e2d8 SeqStack() // 63 59 90 27 62 21 49 92 86 35 93 15 77 86 83 // 0x7fff9908e2b0 SeqStack() // 0x527510 SeqStack() // 70 // 0x527510 ~SeqStack() // 0x7fff9908e2b0 ~SeqStack() // 0x7fff9908e2d8 ~SeqStack() // 运行结束。 return 0; }
这篇关于C++面向对象-构造函数与析构函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升