C++面向对象、初始化列表、static const
面向对象OOP
OOP的四大特征:抽象、封装、继承、多态
对象内存大小只和成员变量有关,不同对象的变量都有自己的空间,成员方法是所有对象共享的,一旦编译会添加this指针,指向调用该方法的对象的地址
#include <iostream> class SeqStack { public: SeqStack(int size = 10) { _pstack = new int[size]; _top = -1; _size = size; } ~SeqStack() { 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; } private: int* _pstack; int _top; int _size; 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; } }; int main() { SeqStack s(5); for (size_t i = 0; i < 15; i++) { s.push(rand() % 100); } while (!s.empty()) { std::cout << s.top() << " " << std::endl; s.pop(); } }
全局变量在.data,程序结束调用析构函数
对象默认的拷贝构造是做内存的数据拷贝
如果对象占用外部资源,那么浅拷贝就会出现问题!多次释放同一指针,应该用深拷贝,自定义函数,开辟新内存
默认的赋值=操作也是浅拷贝
初始化列表
初始化的顺序按照成员定义的顺序
class Test { public: Test(int data = 10):mb(data),ma(mb){} private: int ma; int mb; } int main(){ Test t; //mb:10,ma:-858993460 ,即0xcccccccc return 0; }
Static
类中的static成员变量属于类级别,类内定义,类外进行定义初始化;static成员方法,使用类作用域调用,没有this指针不依赖于对象
const
成员方法后面加上const变成常成员方法,相当于this指针前加上const,常对象只能调用常方法不能调用普通方法,普通对象可以调用常方法
指向类成员的指针
要加上作用域,普通的成员变量或成员方法要用对象调用,static不需要对象调用
void (Test::*pfunc)() = &Test::func; int Test::*p = &Test::ma; (t1.*pfunc)(); t1.*p = 20;
标签:
C++
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)