首页 > 编程语言 >C++面向对象、初始化列表、static const

C++面向对象、初始化列表、static const

时间:2023-03-19 13:55:50浏览次数:45  
标签:调用 const int top pstack static C++ Test size

面向对象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

相关文章

  • C++/Qt网络通讯模块设计与实现(三)
    上一节给大家从源码级别分析了SNetClient网络客户端的实现过程,详见​C++/Qt网络通讯模块设计与实现(二),并给大家留了一个疑问,即引入SNetClientRunning类是为了解决什么问题......
  • C++模板特化,Concept,typename
    typenameT,表示T为类型,而不是变量那,T::A是什么?T可以是我们自己写的类,那T::A就是成员变量或成员函数,另外,T::A还可以是类型,T内定义的类型所以,编译器需要区分,T::A到底是什么......
  • 钟楼-c++
    #include<iostream>#include"minecraft.h"usingnamespacestd;TxMinecraftmc;intx,y,z,id,data;voidsix(intx,inty,intz){//地基四个6*6正方形空心id......
  • SYNU PTA C++ 第三章实验题
    题目详细内容见PTA,仅提供答案参考。7-7冒泡1#include<iostream>2usingnamespacestd;34voidmerge(int*arr,intleft,intmid,intright)5{6......
  • C++ mutex,lock,unlock,lockguard
    //model/util.h#pragmaonce#include<algorithm>#include<chrono>#include<ctime>#include<fstream>#include<iomanip>#include<iostream>#include<map>......
  • c++钟楼
    #include<iostream>#include<string>#include"minecraft.h"usingnamespacestd;TxMinecraftmc;intx,y,z,id,data;voida(){ //正方形 mc.fillBlocks(x,y-1......
  • c++常用STL库及常用函数
    临近各种算法比赛,相信很多人想笔者一样还总是记不住很多函数的用法,特此总结一下常用的STL标准库以及标准函数,希望能够有所帮助。1.输入输出输入输出一般用两个标准库:#i......
  • c++ 影响多线程速度的因素记录
    目录0.序言1.缓存行同步问题/共享数据竞争1.1测试代码1.2测试逻辑1.3测试结果1.4小结2.任务颗粒度过小问题2.1测试代码2.1测试逻辑2.2测试结果2.3小结3.缓存未......
  • C++ class struct
    classandstruct目录前文问题对象与引用引用的传递对象copyshallowcopydepthcopymemcpy(data,a.data,sizeof(T)*n);简单类型复杂类型指针类型的......
  • C++ const的理解
    const​const修饰的变量不能再作为左值,初始化后值不能被修改C和C++const的区别​C语言中const修饰的值是常变量,不是常量,只是不能作为左值被修改voidmain(){......