面向对象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;
标签:调用,const,int,top,pstack,static,C++,Test,size
From: https://www.cnblogs.com/KongJiBlogs/p/17232951.html